88 *
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/backend/storage/lmgr/lmgr.c,v 1.75 2005/05/29 22:45:02 tgl Exp $
11+ * $PostgreSQL: pgsql/src/backend/storage/lmgr/lmgr.c,v 1.76 2005/06/14 22:15:32 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -142,8 +142,8 @@ LockRelation(Relation relation, LOCKMODE lockmode)
142142 relation -> rd_lockInfo .lockRelId .dbId ,
143143 relation -> rd_lockInfo .lockRelId .relId );
144144
145- res = LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
146- lockmode , false);
145+ res = LockAcquire (LockTableId , & tag , relation -> rd_istemp ,
146+ lockmode , false, false );
147147
148148 /*
149149 * Check to see if the relcache entry has been invalidated while we
@@ -179,8 +179,8 @@ ConditionalLockRelation(Relation relation, LOCKMODE lockmode)
179179 relation -> rd_lockInfo .lockRelId .dbId ,
180180 relation -> rd_lockInfo .lockRelId .relId );
181181
182- res = LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
183- lockmode , true);
182+ res = LockAcquire (LockTableId , & tag , relation -> rd_istemp ,
183+ lockmode , false, true);
184184
185185 if (res == LOCKACQUIRE_NOT_AVAIL )
186186 return false;
@@ -214,7 +214,7 @@ UnlockRelation(Relation relation, LOCKMODE lockmode)
214214 relation -> rd_lockInfo .lockRelId .dbId ,
215215 relation -> rd_lockInfo .lockRelId .relId );
216216
217- LockRelease (LockTableId , & tag , GetTopTransactionId (), lockmode );
217+ LockRelease (LockTableId , & tag , lockmode , false );
218218}
219219
220220/*
@@ -230,14 +230,14 @@ UnlockRelation(Relation relation, LOCKMODE lockmode)
230230 * relcache entry is up to date.
231231 */
232232void
233- LockRelationForSession (LockRelId * relid , LOCKMODE lockmode )
233+ LockRelationForSession (LockRelId * relid , bool istemprel , LOCKMODE lockmode )
234234{
235235 LOCKTAG tag ;
236236
237237 SET_LOCKTAG_RELATION (tag , relid -> dbId , relid -> relId );
238238
239- (void ) LockAcquire (LockTableId , & tag , InvalidTransactionId ,
240- lockmode , false);
239+ (void ) LockAcquire (LockTableId , & tag , istemprel ,
240+ lockmode , true, false);
241241}
242242
243243/*
@@ -250,7 +250,7 @@ UnlockRelationForSession(LockRelId *relid, LOCKMODE lockmode)
250250
251251 SET_LOCKTAG_RELATION (tag , relid -> dbId , relid -> relId );
252252
253- LockRelease (LockTableId , & tag , InvalidTransactionId , lockmode );
253+ LockRelease (LockTableId , & tag , lockmode , true );
254254}
255255
256256/*
@@ -272,8 +272,8 @@ LockRelationForExtension(Relation relation, LOCKMODE lockmode)
272272 relation -> rd_lockInfo .lockRelId .dbId ,
273273 relation -> rd_lockInfo .lockRelId .relId );
274274
275- (void ) LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
276- lockmode , false);
275+ (void ) LockAcquire (LockTableId , & tag , relation -> rd_istemp ,
276+ lockmode , false, false );
277277}
278278
279279/*
@@ -288,7 +288,7 @@ UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
288288 relation -> rd_lockInfo .lockRelId .dbId ,
289289 relation -> rd_lockInfo .lockRelId .relId );
290290
291- LockRelease (LockTableId , & tag , GetTopTransactionId (), lockmode );
291+ LockRelease (LockTableId , & tag , lockmode , false );
292292}
293293
294294/*
@@ -307,8 +307,8 @@ LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
307307 relation -> rd_lockInfo .lockRelId .relId ,
308308 blkno );
309309
310- (void ) LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
311- lockmode , false);
310+ (void ) LockAcquire (LockTableId , & tag , relation -> rd_istemp ,
311+ lockmode , false, false );
312312}
313313
314314/*
@@ -327,8 +327,8 @@ ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
327327 relation -> rd_lockInfo .lockRelId .relId ,
328328 blkno );
329329
330- return (LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
331- lockmode , true) != LOCKACQUIRE_NOT_AVAIL );
330+ return (LockAcquire (LockTableId , & tag , relation -> rd_istemp ,
331+ lockmode , false, true) != LOCKACQUIRE_NOT_AVAIL );
332332}
333333
334334/*
@@ -344,7 +344,7 @@ UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
344344 relation -> rd_lockInfo .lockRelId .relId ,
345345 blkno );
346346
347- LockRelease (LockTableId , & tag , GetTopTransactionId (), lockmode );
347+ LockRelease (LockTableId , & tag , lockmode , false );
348348}
349349
350350/*
@@ -365,8 +365,8 @@ LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
365365 ItemPointerGetBlockNumber (tid ),
366366 ItemPointerGetOffsetNumber (tid ));
367367
368- (void ) LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
369- lockmode , false);
368+ (void ) LockAcquire (LockTableId , & tag , relation -> rd_istemp ,
369+ lockmode , false, false );
370370}
371371
372372/*
@@ -383,7 +383,7 @@ UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
383383 ItemPointerGetBlockNumber (tid ),
384384 ItemPointerGetOffsetNumber (tid ));
385385
386- LockRelease (LockTableId , & tag , GetTopTransactionId (), lockmode );
386+ LockRelease (LockTableId , & tag , lockmode , false );
387387}
388388
389389/*
@@ -400,8 +400,8 @@ XactLockTableInsert(TransactionId xid)
400400
401401 SET_LOCKTAG_TRANSACTION (tag , xid );
402402
403- (void ) LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
404- ExclusiveLock , false);
403+ (void ) LockAcquire (LockTableId , & tag , false ,
404+ ExclusiveLock , false, false );
405405}
406406
407407/*
@@ -419,7 +419,7 @@ XactLockTableDelete(TransactionId xid)
419419
420420 SET_LOCKTAG_TRANSACTION (tag , xid );
421421
422- LockRelease (LockTableId , & tag , GetTopTransactionId (), ExclusiveLock );
422+ LockRelease (LockTableId , & tag , ExclusiveLock , false );
423423}
424424
425425/*
@@ -438,19 +438,18 @@ void
438438XactLockTableWait (TransactionId xid )
439439{
440440 LOCKTAG tag ;
441- TransactionId myxid = GetTopTransactionId ();
442441
443442 for (;;)
444443 {
445444 Assert (TransactionIdIsValid (xid ));
446- Assert (!TransactionIdEquals (xid , myxid ));
445+ Assert (!TransactionIdEquals (xid , GetTopTransactionId () ));
447446
448447 SET_LOCKTAG_TRANSACTION (tag , xid );
449448
450- (void ) LockAcquire (LockTableId , & tag , myxid ,
451- ShareLock , false);
449+ (void ) LockAcquire (LockTableId , & tag , false ,
450+ ShareLock , false, false );
452451
453- LockRelease (LockTableId , & tag , myxid , ShareLock );
452+ LockRelease (LockTableId , & tag , ShareLock , false );
454453
455454 if (!TransactionIdIsInProgress (xid ))
456455 break ;
@@ -470,9 +469,11 @@ XactLockTableWait(TransactionId xid)
470469 * LockDatabaseObject
471470 *
472471 * Obtain a lock on a general object of the current database. Don't use
473- * this for shared objects (such as tablespaces). It's usually unwise to
474- * apply it to entire relations, also, since a lock taken this way will
475- * NOT conflict with LockRelation.
472+ * this for shared objects (such as tablespaces). It's unwise to apply it
473+ * to relations, also, since a lock taken this way will NOT conflict with
474+ * LockRelation, and also may be wrongly marked if the relation is temp.
475+ * (If we ever invent temp objects that aren't tables, we'll want to extend
476+ * the API of this routine to include an isTempObject flag.)
476477 */
477478void
478479LockDatabaseObject (Oid classid , Oid objid , uint16 objsubid ,
@@ -486,8 +487,8 @@ LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
486487 objid ,
487488 objsubid );
488489
489- (void ) LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
490- lockmode , false);
490+ (void ) LockAcquire (LockTableId , & tag , false ,
491+ lockmode , false, false );
491492}
492493
493494/*
@@ -505,7 +506,7 @@ UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
505506 objid ,
506507 objsubid );
507508
508- LockRelease (LockTableId , & tag , GetTopTransactionId (), lockmode );
509+ LockRelease (LockTableId , & tag , lockmode , false );
509510}
510511
511512/*
@@ -525,8 +526,8 @@ LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
525526 objid ,
526527 objsubid );
527528
528- (void ) LockAcquire (LockTableId , & tag , GetTopTransactionId () ,
529- lockmode , false);
529+ (void ) LockAcquire (LockTableId , & tag , false ,
530+ lockmode , false, false );
530531}
531532
532533/*
@@ -544,5 +545,5 @@ UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
544545 objid ,
545546 objsubid );
546547
547- LockRelease (LockTableId , & tag , GetTopTransactionId (), lockmode );
548+ LockRelease (LockTableId , & tag , lockmode , false );
548549}
0 commit comments