Merge pull request #2568 from citusdata/fix_spinlock_use

Make sure spinlock is not left unreleased when an exception is thrown
pull/2573/head
Murat Tuncer 2018-12-25 16:27:49 +03:00 committed by GitHub
commit 1dbbc6664f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 1 deletions

View File

@ -829,9 +829,15 @@ AssignDistributedTransactionId(void)
void void
MarkCitusInitiatedCoordinatorBackend(void) MarkCitusInitiatedCoordinatorBackend(void)
{ {
/*
* GetLocalGroupId may throw exception which can cause leaving spin lock
* unreleased. Calling GetLocalGroupId function before the lock to avoid this.
*/
int localGroupId = GetLocalGroupId();
SpinLockAcquire(&MyBackendData->mutex); SpinLockAcquire(&MyBackendData->mutex);
MyBackendData->citusBackend.initiatorNodeIdentifier = GetLocalGroupId(); MyBackendData->citusBackend.initiatorNodeIdentifier = localGroupId;
MyBackendData->citusBackend.transactionOriginator = true; MyBackendData->citusBackend.transactionOriginator = true;
SpinLockRelease(&MyBackendData->mutex); SpinLockRelease(&MyBackendData->mutex);