1
0
Fork 0

issue #662: ArangoDB on Windows hanging...

This commit is contained in:
Jan Steemann 2013-11-11 14:29:53 +01:00
parent 30e58362d7
commit b131dc5a25
3 changed files with 12 additions and 9 deletions

View File

@ -6974,7 +6974,7 @@ static v8::Handle<v8::Value> JS_UnloadVocbaseCol (v8::Arguments const& argv) {
TRI_V8_EXCEPTION_INTERNAL(scope, "cannot extract collection"); TRI_V8_EXCEPTION_INTERNAL(scope, "cannot extract collection");
} }
int res = TRI_UnloadCollectionVocBase(collection->_vocbase, collection); int res = TRI_UnloadCollectionVocBase(collection->_vocbase, collection, false);
if (res != TRI_ERROR_NO_ERROR) { if (res != TRI_ERROR_NO_ERROR) {
TRI_V8_EXCEPTION_MESSAGE(scope, res, "cannot unload collection"); TRI_V8_EXCEPTION_MESSAGE(scope, res, "cannot unload collection");

View File

@ -1458,7 +1458,12 @@ void TRI_DestroyVocBase (TRI_vocbase_t* vocbase) {
TRI_vector_pointer_t collections; TRI_vector_pointer_t collections;
int res; int res;
size_t i; size_t i;
// stop replication
TRI_StopReplicationApplier(vocbase->_replicationApplier, false);
TRI_StopReplicationLogger(vocbase->_replicationLogger);
TRI_InitVectorPointer(&collections, TRI_UNKNOWN_MEM_ZONE); TRI_InitVectorPointer(&collections, TRI_UNKNOWN_MEM_ZONE);
TRI_WRITE_LOCK_COLLECTIONS_VOCBASE(vocbase); TRI_WRITE_LOCK_COLLECTIONS_VOCBASE(vocbase);
@ -1473,15 +1478,11 @@ void TRI_DestroyVocBase (TRI_vocbase_t* vocbase) {
TRI_vocbase_col_t* collection; TRI_vocbase_col_t* collection;
collection = (TRI_vocbase_col_t*) vocbase->_collections._buffer[i]; collection = (TRI_vocbase_col_t*) vocbase->_collections._buffer[i];
TRI_UnloadCollectionVocBase(vocbase, collection); TRI_UnloadCollectionVocBase(vocbase, collection, true);
} }
TRI_DestroyVectorPointer(&collections); TRI_DestroyVectorPointer(&collections);
// stop replication
TRI_StopReplicationApplier(vocbase->_replicationApplier, false);
TRI_StopReplicationLogger(vocbase->_replicationLogger);
// this will signal the synchroniser and the compactor threads to do one last iteration // this will signal the synchroniser and the compactor threads to do one last iteration
vocbase->_state = 2; vocbase->_state = 2;
@ -1891,8 +1892,9 @@ TRI_vocbase_col_t* TRI_CreateCollectionVocBase (TRI_vocbase_t* vocbase,
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int TRI_UnloadCollectionVocBase (TRI_vocbase_t* vocbase, int TRI_UnloadCollectionVocBase (TRI_vocbase_t* vocbase,
TRI_vocbase_col_t* collection) { TRI_vocbase_col_t* collection,
if (! collection->_canUnload) { bool force) {
if (! collection->_canUnload && ! force) {
return TRI_set_errno(TRI_ERROR_FORBIDDEN); return TRI_set_errno(TRI_ERROR_FORBIDDEN);
} }

View File

@ -534,7 +534,8 @@ TRI_vocbase_col_t* TRI_CreateCollectionVocBase (TRI_vocbase_t*,
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int TRI_UnloadCollectionVocBase (TRI_vocbase_t*, int TRI_UnloadCollectionVocBase (TRI_vocbase_t*,
TRI_vocbase_col_t*); TRI_vocbase_col_t*,
bool);
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief drops a (document) collection /// @brief drops a (document) collection