*** a/src/backend/storage/lmgr/lock.c --- b/src/backend/storage/lmgr/lock.c *************** *** 130,136 **** static const LockMethodData default_lockmethod = { static const LockMethodData user_lockmethod = { AccessExclusiveLock, /* highest valid lock mode number */ ! false, LockConflicts, lock_mode_names, #ifdef LOCK_DEBUG --- 130,136 ---- static const LockMethodData user_lockmethod = { AccessExclusiveLock, /* highest valid lock mode number */ ! true, LockConflicts, lock_mode_names, #ifdef LOCK_DEBUG *** a/src/backend/storage/lmgr/proc.c --- b/src/backend/storage/lmgr/proc.c *************** *** 629,636 **** LockWaitCancel(void) * At subtransaction abort, we release all locks held by the subtransaction; * this is implemented by retail releasing of the locks under control of * the ResourceOwner mechanism. - * - * Note that user locks are not released in any case. */ void ProcReleaseLocks(bool isCommit) --- 629,634 ---- *************** *** 641,646 **** ProcReleaseLocks(bool isCommit) --- 639,645 ---- LockWaitCancel(); /* Release locks */ LockReleaseAll(DEFAULT_LOCKMETHOD, !isCommit); + LockReleaseAll(USER_LOCKMETHOD, false); } *** a/src/backend/utils/adt/lockfuncs.c --- b/src/backend/utils/adt/lockfuncs.c *************** *** 333,343 **** Datum pg_advisory_lock_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); LOCKTAG tag; SET_LOCKTAG_INT64(tag, key); ! (void) LockAcquire(&tag, ExclusiveLock, true, false); PG_RETURN_VOID(); } --- 333,344 ---- pg_advisory_lock_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); + bool session = PG_GETARG_BOOL(1); LOCKTAG tag; SET_LOCKTAG_INT64(tag, key); ! (void) LockAcquire(&tag, ExclusiveLock, session, false); PG_RETURN_VOID(); } *************** *** 349,359 **** Datum pg_advisory_lock_shared_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); LOCKTAG tag; SET_LOCKTAG_INT64(tag, key); ! (void) LockAcquire(&tag, ShareLock, true, false); PG_RETURN_VOID(); } --- 350,361 ---- pg_advisory_lock_shared_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); + bool session = PG_GETARG_BOOL(1); LOCKTAG tag; SET_LOCKTAG_INT64(tag, key); ! (void) LockAcquire(&tag, ShareLock, session, false); PG_RETURN_VOID(); } *************** *** 367,378 **** Datum pg_try_advisory_lock_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT64(tag, key); ! res = LockAcquire(&tag, ExclusiveLock, true, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } --- 369,381 ---- pg_try_advisory_lock_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); + bool session = PG_GETARG_BOOL(1); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT64(tag, key); ! res = LockAcquire(&tag, ExclusiveLock, session, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } *************** *** 386,397 **** Datum pg_try_advisory_lock_shared_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT64(tag, key); ! res = LockAcquire(&tag, ShareLock, true, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } --- 389,401 ---- pg_try_advisory_lock_shared_int8(PG_FUNCTION_ARGS) { int64 key = PG_GETARG_INT64(0); + bool session = PG_GETARG_BOOL(1); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT64(tag, key); ! res = LockAcquire(&tag, ShareLock, session, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } *************** *** 442,452 **** pg_advisory_lock_int4(PG_FUNCTION_ARGS) { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); LOCKTAG tag; SET_LOCKTAG_INT32(tag, key1, key2); ! (void) LockAcquire(&tag, ExclusiveLock, true, false); PG_RETURN_VOID(); } --- 446,457 ---- { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); + bool session = PG_GETARG_BOOL(2); LOCKTAG tag; SET_LOCKTAG_INT32(tag, key1, key2); ! (void) LockAcquire(&tag, ExclusiveLock, session, false); PG_RETURN_VOID(); } *************** *** 459,469 **** pg_advisory_lock_shared_int4(PG_FUNCTION_ARGS) { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); LOCKTAG tag; SET_LOCKTAG_INT32(tag, key1, key2); ! (void) LockAcquire(&tag, ShareLock, true, false); PG_RETURN_VOID(); } --- 464,475 ---- { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); + bool session = PG_GETARG_BOOL(2); LOCKTAG tag; SET_LOCKTAG_INT32(tag, key1, key2); ! (void) LockAcquire(&tag, ShareLock, session, false); PG_RETURN_VOID(); } *************** *** 478,489 **** pg_try_advisory_lock_int4(PG_FUNCTION_ARGS) { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT32(tag, key1, key2); ! res = LockAcquire(&tag, ExclusiveLock, true, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } --- 484,496 ---- { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); + bool session = PG_GETARG_BOOL(2); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT32(tag, key1, key2); ! res = LockAcquire(&tag, ExclusiveLock, session, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } *************** *** 498,509 **** pg_try_advisory_lock_shared_int4(PG_FUNCTION_ARGS) { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT32(tag, key1, key2); ! res = LockAcquire(&tag, ShareLock, true, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } --- 505,517 ---- { int32 key1 = PG_GETARG_INT32(0); int32 key2 = PG_GETARG_INT32(1); + bool session = PG_GETARG_BOOL(2); LOCKTAG tag; LockAcquireResult res; SET_LOCKTAG_INT32(tag, key1, key2); ! res = LockAcquire(&tag, ShareLock, session, true); PG_RETURN_BOOL(res != LOCKACQUIRE_NOT_AVAIL); } *** a/src/include/catalog/pg_proc.h --- b/src/include/catalog/pg_proc.h *************** *** 4373,4397 **** DATA(insert OID = 2749 ( arraycontained PGNSP PGUID 12 1 0 0 f f f t f i 2 0 DESCR("is contained by"); /* userlock replacements */ ! DATA(insert OID = 2880 ( pg_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 1 0 2278 "20" _null_ _null_ _null_ _null_ pg_advisory_lock_int8 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 2881 ( pg_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 1 0 2278 "20" _null_ _null_ _null_ _null_ pg_advisory_lock_shared_int8 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock"); ! DATA(insert OID = 2882 ( pg_try_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ pg_try_advisory_lock_int8 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 2883 ( pg_try_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ pg_try_advisory_lock_shared_int8 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock if available"); DATA(insert OID = 2884 ( pg_advisory_unlock PGNSP PGUID 12 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ pg_advisory_unlock_int8 _null_ _null_ _null_ )); DESCR("release exclusive advisory lock"); DATA(insert OID = 2885 ( pg_advisory_unlock_shared PGNSP PGUID 12 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ pg_advisory_unlock_shared_int8 _null_ _null_ _null_ )); DESCR("release shared advisory lock"); ! DATA(insert OID = 2886 ( pg_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 2 0 2278 "23 23" _null_ _null_ _null_ _null_ pg_advisory_lock_int4 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 2887 ( pg_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 2 0 2278 "23 23" _null_ _null_ _null_ _null_ pg_advisory_lock_shared_int4 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock"); ! DATA(insert OID = 2888 ( pg_try_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 2 0 16 "23 23" _null_ _null_ _null_ _null_ pg_try_advisory_lock_int4 _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 2889 ( pg_try_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 2 0 16 "23 23" _null_ _null_ _null_ _null_ pg_try_advisory_lock_shared_int4 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock if available"); DATA(insert OID = 2890 ( pg_advisory_unlock PGNSP PGUID 12 1 0 0 f f f t f v 2 0 16 "23 23" _null_ _null_ _null_ _null_ pg_advisory_unlock_int4 _null_ _null_ _null_ )); DESCR("release exclusive advisory lock"); --- 4373,4413 ---- DESCR("is contained by"); /* userlock replacements */ ! DATA(insert OID = 2880 ( pg_advisory_lock PGNSP PGUID 14 1 0 0 f f f t f v 1 0 2278 "20" _null_ _null_ _null_ _null_ "select pg_advisory_lock($1, true)" _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 3065 ( pg_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 2 0 2278 "20 16" _null_ _null_ _null_ _null_ pg_advisory_lock_int8 _null_ _null_ _null_ )); ! DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 2881 ( pg_advisory_lock_shared PGNSP PGUID 14 1 0 0 f f f t f v 1 0 2278 "20" _null_ _null_ _null_ _null_ "select pg_advisory_lock_shared($1, true)" _null_ _null_ _null_ )); ! DESCR("obtain shared advisory lock"); ! DATA(insert OID = 3066 ( pg_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 2 0 2278 "20 16" _null_ _null_ _null_ _null_ pg_advisory_lock_shared_int8 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock"); ! DATA(insert OID = 2882 ( pg_try_advisory_lock PGNSP PGUID 14 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ "select pg_try_advisory_lock($1, true)" _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 3067 ( pg_try_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 2 0 16 "20 16" _null_ _null_ _null_ _null_ pg_try_advisory_lock_int8 _null_ _null_ _null_ )); ! DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 2883 ( pg_try_advisory_lock_shared PGNSP PGUID 14 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ "select pg_try_advisory_lock_shared($1, true)" _null_ _null_ _null_ )); ! DESCR("obtain shared advisory lock if available"); ! DATA(insert OID = 3068 ( pg_try_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 2 0 16 "20 16" _null_ _null_ _null_ _null_ pg_try_advisory_lock_shared_int8 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock if available"); DATA(insert OID = 2884 ( pg_advisory_unlock PGNSP PGUID 12 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ pg_advisory_unlock_int8 _null_ _null_ _null_ )); DESCR("release exclusive advisory lock"); DATA(insert OID = 2885 ( pg_advisory_unlock_shared PGNSP PGUID 12 1 0 0 f f f t f v 1 0 16 "20" _null_ _null_ _null_ _null_ pg_advisory_unlock_shared_int8 _null_ _null_ _null_ )); DESCR("release shared advisory lock"); ! DATA(insert OID = 2886 ( pg_advisory_lock PGNSP PGUID 14 1 0 0 f f f t f v 2 0 2278 "23 23" _null_ _null_ _null_ _null_ "select pg_advisory_lock($1, $2, true)" _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 3069 ( pg_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 3 0 2278 "23 23 16" _null_ _null_ _null_ _null_ pg_advisory_lock_int4 _null_ _null_ _null_ )); ! DESCR("obtain exclusive advisory lock"); ! DATA(insert OID = 2887 ( pg_advisory_lock_shared PGNSP PGUID 14 1 0 0 f f f t f v 2 0 2278 "23 23" _null_ _null_ _null_ _null_ "select pg_advisory_lock_shared($1, $2, true)" _null_ _null_ _null_ )); ! DESCR("obtain shared advisory lock"); ! DATA(insert OID = 3070 ( pg_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 3 0 2278 "23 23 16" _null_ _null_ _null_ _null_ pg_advisory_lock_shared_int4 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock"); ! DATA(insert OID = 2888 ( pg_try_advisory_lock PGNSP PGUID 14 1 0 0 f f f t f v 2 0 16 "23 23" _null_ _null_ _null_ _null_ "select pg_try_advisory_lock($1, $2, true)" _null_ _null_ _null_ )); DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 3071 ( pg_try_advisory_lock PGNSP PGUID 12 1 0 0 f f f t f v 3 0 16 "23 23 16" _null_ _null_ _null_ _null_ pg_try_advisory_lock_int4 _null_ _null_ _null_ )); ! DESCR("obtain exclusive advisory lock if available"); ! DATA(insert OID = 2889 ( pg_try_advisory_lock_shared PGNSP PGUID 14 1 0 0 f f f t f v 2 0 16 "23 23" _null_ _null_ _null_ _null_ "select pg_try_advisory_lock_shared($1, $2, true)" _null_ _null_ _null_ )); ! DESCR("obtain shared advisory lock if available"); ! DATA(insert OID = 3072 ( pg_try_advisory_lock_shared PGNSP PGUID 12 1 0 0 f f f t f v 3 0 16 "23 23 16" _null_ _null_ _null_ _null_ pg_try_advisory_lock_shared_int4 _null_ _null_ _null_ )); DESCR("obtain shared advisory lock if available"); DATA(insert OID = 2890 ( pg_advisory_unlock PGNSP PGUID 12 1 0 0 f f f t f v 2 0 16 "23 23" _null_ _null_ _null_ _null_ pg_advisory_unlock_int4 _null_ _null_ _null_ )); DESCR("release exclusive advisory lock");