mirror of https://gitee.com/bigwinds/arangodb
some locking fixes
This commit is contained in:
parent
b4d115fd4d
commit
91c63338f2
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue