From: SourceForge.net <no...@so...> - 2004-11-18 11:58:52
|
Bugs item #1051982, was opened at 2004-10-22 07:56 Message generated for change (Settings changed) made by j_wheeler You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=558446&aid=1051982&group_id=80013 Category: None Group: None >Status: Closed Resolution: None Priority: 5 Submitted By: Taka Muraoka (t_muraoka) Assigned to: Nobody/Anonymous (nobody) Summary: Problem with delete'ing self in FSDirectory::close() Initial Comment: void FSDirectory::close() { ... Directory* d = DIRECTORIES.get(getDirName()) ; delete d ; ... } This can sometimes to return a pointer to the currently active FSDirectory (i.e. this). It gets deleted but then subsequent lines try to access it to unlock its mutex. Fixed version: void FSDirectory::close() { int adjustedRefCount ; LOCK_MUTEX(FSDIR_CLOSE); adjustedRefCount = -- refCount ; UNLOCK_MUTEX(FSDIR_CLOSE); if (adjustedRefCount <= 0) { LOCK_MUTEX(DIRECTORIES_MUTEX); Directory* d = DIRECTORIES.get(getDirName()); if ( d != NULL ){ DIRECTORIES.remove( getDirName()); delete d ; } UNLOCK_MUTEX(DIRECTORIES_MUTEX); } } ---------------------------------------------------------------------- Comment By: John Wheeler (j_wheeler) Date: 2004-11-18 12:58 Message: Logged In: YES user_id=1149323 Fixed in CVS FSDirectory.cpp 1.15 ---------------------------------------------------------------------- Comment By: Paul Jones (joneswoohoo) Date: 2004-11-11 23:48 Message: Logged In: YES user_id=1156975 Well I can vouch for the fact that this one works. I had a problem where the close() was accessing an already free()d FSDirectory. This patch fixed it. Thanks Taka ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=558446&aid=1051982&group_id=80013 |