Здравствуйте.
Есть приложение, в нем 3 потока и в одном из потоков используется такой код
if (m_netbufsize > bufsize) return;
char *newbuf = new char[bufsize+256]; //<-
if (newbuf == NULL)
{
throw ErrorException(sz_L70);
}
При вызове оператора new похоже происходит deadlock в ф-и
_nh_malloc_dbg
void * __cdecl _nh_malloc_dbg (
size_t nSize,
int nhFlag,
int nBlockUse,
const char * szFileName,
int nLine
)
{
void * pvBlk;
for (;;)
{
#ifdef _MT
/* lock the heap
*/
_mlock(_HEAP_LOCK); // здесь
__try {
#endif /* _MT */
/* do the allocation
*/
pvBlk = _heap_alloc_dbg(nSize, nBlockUse, szFileName, nLine);
#ifdef _MT
}
__finally {
/* unlock the heap
*/
_munlock(_HEAP_LOCK);
}
#endif /* _MT */
if (pvBlk || nhFlag == 0)
return pvBlk;
/* call installed new handler */
if (!_callnewh(nSize))
return NULL;
/* new handler was successful -- try to allocate again */
}
}
Прекрасно понимаю, что информации недостаточно, но может кто сталкивался или пнет куда смотреть
Спасибо.
Ex nihilo nihil fit (Rene Descartes)
Здравствуйте, pigeon, Вы писали:
используй multithreaded CRT
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Константин Л., Вы писали:
КЛ>Здравствуйте, pigeon, Вы писали:
КЛ>используй multithreaded CRT
Собиралось с опцией /MTd
Ex nihilo nihil fit (Rene Descartes)
Сложно так сказать.
Могу посоветовать переопределить метод _mlock и munlock и добавить отладочную информацию по локерам... И посмотреть где происходит сие, если проблема конечно действительно в этом...