
HI, igaztanaga I don't use any of experimental detail classes like("emulation_recursive_mutex"). I'm using wmanaged_windows_shared_memory::find method to find a element, and find method eventually will call emulation_recursive_mutex::lock. The stack cannot see find due to compile optimization. The code is like this: namespace BOOSTIP = ::boost::interprocess; typedef struct _CACHE_ITEM { BOOSTIP::offset_ptr<BYTE> CacheValue; ULONG CacheLength; ULONG CacheMaxLength; volatile BOOL CacheDirty; _CACHE_ITEM() { CacheValue = 0; CacheLength = 0; CacheMaxLength = 0; CacheDirty = FALSE; } } CACHE_ITEM, *PCACHE_ITEM; BOOL CConfigCache::Read(__in LPCTSTR lpszName, __out PVOID lpValue, __in DWORD dwSize, __out_opt PDWORD dwRetSize /*= NULL */) { try { if (CanIAccessCache()) { CScopeGuard<CMutex> guard(m_FunctionLock); // // ....... ignore some useless code // PCACHE_ITEM CacheItem = m_SharedMemory.find <CACHE_ITEM>(lpszName).first; if (CacheItem) { if (dwSize >= CacheItem->CacheLength) { if (dwRetSize) *dwRetSize = CacheItem->CacheLength; if (lpValue && CacheItem->CacheLength && CacheItem->CacheValue) { CopyMemory(lpValue, CacheItem->CacheValue.get(), CacheItem->CacheLength); return DecryptBuffer((LPBYTE)lpValue, CacheItem->CacheLength); } else { return TRUE; } } else if (dwRetSize) { *dwRetSize = CacheItem->CacheLength; return TRUE; } else { return FALSE; } } else { ++m_ReadConfigCacheMissCount; } } return FALSE; } catch (BOOSTIP::interprocess_exception &) { EXCEPTION_OUT("CConfigCache::Read interprocess_exception\n"); MakeCacheInvalid(); return FALSE; } catch (CConfigCacheBaseException &) { EXCEPTION_OUT("CConfigCache::Read CConfigCacheBaseException\n"); MakeCacheInvalid(); return FALSE; } } Program random crash at : PCACHE_ITEM CacheItem = m_SharedMemory.find<CACHE_ITEM>(lpszName).first; I don't know why? 2011/11/3 <igaztanaga@gmail.com>
El 02/11/2011 8:00, nevergone . escribió:
Hello,
I'm using boost::interprocess to share config information between processes on windows platform. It random crash on custom pc. I only have a minidump dump, here is the stack output by windbg:
It's hard to say, but using experimental detail classes ("emulation_recursive_mutex") is not supported. They are ongoin experiments.
Ion ______________________________**_________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/**mailman/listinfo.cgi/boost-**users<http://lists.boost.org/mailman/listinfo.cgi/boost-users>