<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div>HI, all</div><div>   My daemon exists a libvirt API  call:</div><div>virEventRegisterDefaultImpl();</div><div><br></div><div>once I called the virEventRegisterDefaultImpl() ,must be core ,the bt stack is:</div><div><br></div><div>(gdb) bt<br>#0  free <span style="background-color: rgb(221, 64, 50);">(ptr=0x1)</span> at include/jemalloc/internal/arena.h:652<br>#1  0x00007f57690a488a in virFree () from /lib64/libvirt.so.0<br>#2  0x00007f57690c3562 in virResetError () from /lib64/libvirt.so.0<br>#3  0x00007f57690c49ad in <span style="background-color: rgb(221, 64, 50);">virEventRegisterDefaultImpl </span>() from /lib64/libvirt.so.0<br>#4  0x00000000004029ad in main (argc=<optimized out>, argv=<optimized out>) at vnf_mgt/vnf_control.c:2920<br>(gdb) quit</div><div><br></div><div>the following code copy from libvirt/src/util /<br></div><div><br></div><div>int virEventRegisterDefaultImpl(void)<br>{<br>    VIR_DEBUG("registering default event implementation");<br><br>    <span style="background-color: rgb(221, 64, 50);">virResetLastError();</span><br><br>    if (virEventPollInit() < 0) {<br>        virDispatchError(NULL);<br>        return -1;<br>    }<br><br>    virEventRegisterImpl(virEventPollAddHandle,<br>                         virEventPollUpdateHandle,<br>                         virEventPollRemoveHandle,<br>                         virEventPollAddTimeout,<br>                         virEventPollUpdateTimeout,<br>                         virEventPollRemoveTimeout);<br><br>    return 0;<br>}</div><div><br></div><div>void<br>virResetLastError(void)<br>{<br>    virErrorPtr err = virLastErrorObject();<br>    if (err)<br>       <span style="background-color: rgb(221, 64, 50);"> virResetError(err);</span><br>}</div><div><br></div><div><br></div><div>static virErrorPtr<br>virLastErrorObject(void)<br>{<br>    virErrorPtr err;<br>   <span style="background-color: rgb(221, 64, 50);"> err = virThreadLocalGet(&virLastErr);</span><br>    if (!err) {<br>        if (VIR_ALLOC_QUIET(err) < 0)<br>            return NULL;<br>        if (virThreadLocalSet(&virLastErr, err) < 0)<br>            VIR_FREE(err);<br>    }<br>    return err;<br>}</div><div><br></div><div><br></div><div>void<br>virResetError(virErrorPtr err)<br>{<br>    if (err == NULL)<br>        return;<br>    VIR_FREE(err->message);<br>    VIR_FREE(err->str1);<br>    VIR_FREE(err->str2);<br>    VIR_FREE(err->str3);<br>    memset(err, 0, sizeof(virError));<br>}</div><div># define VIR_FREE(ptr) <span style="background-color: rgb(221, 64, 50);">virFree</span>(1 ? (void *) &(ptr) : (ptr))</div><div><br></div><div><br></div><div>void virFree(void *ptrptr)<br>{<br>    int save_errno = errno;<br><br><span style="background-color: rgb(221, 64, 50);">    free(*(void**)ptrptr);</span><br>    *(void**)ptrptr = NULL;<br>    errno = save_errno;<br>}<br></div><div><br></div><div>when my daemon link with jemalloc must core£¬but if i use glibc to manage memory ,then it work fine, why ? <br></div><div><br></div><div><br></div><div><br></div></div><br><br><span title="neteasefooter"><p> </p></span>