Проблема с оператором 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
Re: Проблема с оператором new
От: Константин Л. Франция  
Дата: 02.10.06 15:06
Оценка:
Здравствуйте, pigeon, Вы писали:

используй multithreaded CRT
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Проблема с оператором new
От: pigeon Великобритания
Дата: 03.10.06 05:45
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Здравствуйте, pigeon, Вы писали:


КЛ>используй multithreaded CRT

Собиралось с опцией /MTd
Ex nihilo nihil fit (Rene Descartes)
Premature optimization is the root of all evil in programming. Donald Knuth
Re: Проблема с оператором new
От: Shmakov Россия  
Дата: 03.10.06 19:01
Оценка:
Сложно так сказать.
Могу посоветовать переопределить метод _mlock и munlock и добавить отладочную информацию по локерам... И посмотреть где происходит сие, если проблема конечно действительно в этом...
Re: Проблема с оператором new
От: NailS Россия  
Дата: 04.10.06 06:13
Оценка:
Здравствуйте, pigeon, Вы писали:

P>Здравствуйте.

P>Есть приложение, в нем 3 потока и в одном из потоков используется такой код
...
P> При вызове оператора new похоже происходит deadlock в ф-и _nh_malloc_dbg

Посмотри, чем занимаются остальные 2 потока.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.