1
0
Fork 0

some locking fixes

This commit is contained in:
Jan Steemann 2013-04-17 18:02:55 +02:00
parent b4d115fd4d
commit 91c63338f2
3 changed files with 18 additions and 0 deletions

View File

@ -414,6 +414,7 @@ namespace triagens {
TRI_primary_collection_t* primary = primaryCollection(trxCollection);
*barrier = TRI_CreateBarrierElement(&primary->_barrierList);
if (*barrier == 0) {
return TRI_ERROR_OUT_OF_MEMORY;
}
@ -422,6 +423,7 @@ namespace triagens {
int res = this->lock(trxCollection, TRI_TRANSACTION_READ);
if (res != TRI_ERROR_NO_ERROR) {
this->unlock(trxCollection, TRI_TRANSACTION_READ);
TRI_FreeBarrier(*barrier);
*barrier = 0;
return res;
@ -484,6 +486,7 @@ namespace triagens {
int res = this->lock(trxCollection, TRI_TRANSACTION_READ);
if (res != TRI_ERROR_NO_ERROR) {
this->unlock(trxCollection, TRI_TRANSACTION_READ);
return res;
}
@ -530,6 +533,7 @@ namespace triagens {
int res = this->lock(trxCollection, TRI_TRANSACTION_READ);
if (res != TRI_ERROR_NO_ERROR) {
this->unlock(trxCollection, TRI_TRANSACTION_READ);
return res;
}
@ -542,7 +546,9 @@ namespace triagens {
}
*barrier = TRI_CreateBarrierElement(&primary->_barrierList);
if (*barrier == 0) {
this->unlock(trxCollection, TRI_TRANSACTION_READ);
return TRI_ERROR_OUT_OF_MEMORY;
}

View File

@ -1746,10 +1746,17 @@ static v8::Handle<v8::Value> JS_AnyQuery (v8::Arguments const& argv) {
res = trx.finish(res);
if (res != TRI_ERROR_NO_ERROR) {
if (barrier != 0) {
TRI_FreeBarrier(barrier);
}
TRI_V8_EXCEPTION_MESSAGE(scope, res, "cannot fetch document");
}
if (document._data == 0 || document._key == 0) {
if (barrier != 0) {
TRI_FreeBarrier(barrier);
}
return scope.Close(v8::Null());
}

View File

@ -1177,6 +1177,11 @@ static int UnlockCollection (TRI_transaction_collection_t* trxCollection,
assert(trxCollection->_locked == true);
primary = trxCollection->_collection->_collection;
if (trxCollection->_nestingLevel < nestingLevel) {
// only process our own collections
return TRI_ERROR_NO_ERROR;
}
if (type == TRI_TRANSACTION_READ) {
LOG_TRX(trxCollection->_transaction,