Проблема с оператором new
От: pigeon Великобритания
Дата: 02.10.06 13:59
Оценка:
Здравствуйте.
Есть приложение, в нем 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)
Premature optimization is the root of all evil in programming. Donald Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.