microsoft / microsoft/mimalloc

mi_new ()

Aperta
#286 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
C
Stelle
13.4k
Fork
1.2k
Merge medio
4g 45m
PR unite (30g)
13

Descrizione

Hi,
my class code snippet :

char * const CGrowingBuffer::Append(const char *pBuf, int nLen)
 {
     if(nLen <=0)return NULL;
 
     if(m_nCurrPos + nLen > m_nSize)
     {
         char *pOldBuf = m_pBuffer;
         m_pBuffer = new char[m_nCurrPos + nLen];  // line 40
         memcpy(m_pBuffer,pOldBuf,m_nSize);
         m_nSize = m_nCurrPos + nLen;
         delete [] pOldBuf;
     }
     
     memcpy(&m_pBuffer[m_nCurrPos],pBuf,nLen);
     m_nCurrPos += nLen;
     return &m_pBuffer[m_nCurrPos - nLen];
 }

 void CGrowingBuffer::Reset()
 {
     m_nCurrPos = 0;
}

my calling code:

           recv_msg[recv_msg_len] = '\0';
            Ft_DEBUG <<"recv msg: " << recv_msg <<" type: " << type << " recv_msg_len: " << recv_msg_len << endl;
            SgeInMsgMemPool& pool = SgeInMsgMemPool::GetInstance();
            auto* pCGrowingBuffer = pool.Get();
            if (pCGrowingBuffer) {
                pCGrowingBuffer->Reset();
                pCGrowingBuffer->Append(recv_msg, recv_msg_len); // line 76
                ptr->Enqueue(pCGrowingBuffer);
            } else {
                Ft_ERROR << "failed to get buffer: " << pool.GetLastGetErrorMsg() << endl;
            }

coredump:

Using host libthread_db library "/lib64/libthread_db.so.1".
Missing separate debuginfo for /home/sgesys/flex/libs/libxerces-c-3.1.so
Try: yum --enablerepo='debug' install /usr/lib/debug/.build-id/df/7633d16d4b4063b8cd02ccdbb11acaa15526f5.debug
Core was generated by `sge_flex -nodeid SGE_FLEX'.
Program terminated with signal 11, Segmentation fault.
#0 0x000000000065599e in mi_new ()
Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64 libgcc-4.8.5-28.el7.x86_64 libstdc++-4.8.5-28.el7.x86_64 zlib-1.2.7-17.el7.x86_64
(gdb) bt full
#0 0x000000000065599e in mi_new ()
No symbol table info available.
#1 0x00000000006bc300 in CGrowingBuffer::Append (this=this@entry=0x7f7da2c01fe0,
pBuf=pBuf@entry=0xa39a40 <recv_msg> "I00=02,Q52=[{O64=38859658,Q25=38859658.000000,Q26=7035.000000,Q36=5528.000000,Q28=27900.000000,Q29=0.044413,Q27=13114460,Q30=25627162642000,Q31=6594.000000,Q11=20200807,Q12=12:35:05,I10=Ag(T+D),I11=\260", <incomplete sequence \327>..., nLen=896) at CGrowingBuffer.cpp:40
pOldBuf =
#2 0x000000000054ec14 in sge_recv_msg (msg=0x7f7da3080c10 "I00=\200\003", type=, con_len=, ctx=) at SgeProxy.cpp:76
recv_msg_len = 896
ret =
pctx =
ptr = 0x7f7da0d40000
PRETTY_FUNCTION = "void sge_recv_msg(const char*, int, unsigned int, void*)"
#3 0x00007f7db3ae502b in __cb_handle_msg (msg=0x7f7da3080c00) at api.c:110
ptr = 0x7f7da0ca0aa0
gtp_msg_session = 0x7f7da3080c00
gtp_msg = 0x7f7da3080c10 "I00=\200\003"
#4 0x00007f7db3ae78b2 in __p_recv_msg (msg=0x7f7da3080c00) at api_lrm.c:333
ret = 0
#5 0x00007f7db2f4a8bf in __p_routine (param=0x0) at z_mpool.c:411
head = 0x7f7da3080c00
ret = 0
count1 = 1
count2 = 0
rt = 0
#6 0x00007f7db29addd5 in start_thread () from /lib64/libpthread.so.0
No symbol table info available.
#7 0x00007f7db12e9b3d in clone () from /lib64/libc.so.6
No symbol table info available.

it seems allocating 896 bytes crashed the program and my server has 32GB memory. what could cause mi_new to fail? I need to improve my code to capture std::bad_alloc exception

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con lo stack trace fornito in CGrowingBuffer.cpp:40 e SgeProxy.cpp:76, quindi esamina i percorsi circostanti di allocazione e gestione dei messaggi. Determina se l’errore di allocazione di 896 byte riportato è riproducibile e documenta la causa effettiva dell’errore e l’esito appropriato per la diagnostica o la gestione degli errori.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
cpp
Ambito
performance
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
25/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.