qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jiri Daněk (JIRA) <j...@apache.org>
Subject [jira] [Updated] (DISPATCH-848) Direct leak of 48 byte(s) in 1 object(s) allocated from qdr_core_subscribe in router_core/route_tables.c:149
Date Wed, 04 Oct 2017 19:24:00 GMT

     [ https://issues.apache.org/jira/browse/DISPATCH-848?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Jiri Daněk updated DISPATCH-848:
--------------------------------
    Attachment: LSan.supp

> Direct leak of 48 byte(s) in 1 object(s) allocated from qdr_core_subscribe in router_core/route_tables.c:149
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: DISPATCH-848
>                 URL: https://issues.apache.org/jira/browse/DISPATCH-848
>             Project: Qpid Dispatch
>          Issue Type: Bug
>          Components: Tests
>    Affects Versions: 1.1.0
>         Environment: Git tip of Proton and Dtspatch, commit hashes follow
> {noformat}
> commit aece4ad2f4e4eb2d141020c59c393a30a79f53a9 (upstream/master)
> Author: Andrew Stitcher <astitcher@apache.org>
>     PROTON-1609: Fix C++ example flags
> {noformat}
> {noformat}
> commit 18c5f8d6293de4227c8c17ef08675cb4eaef689c (HEAD -> master, upstream/master)
> Author: Ganesh Murthy <gmurthy@redhat.com>
>     NO-JIRA - Removed accidental printf inclusion
> {noformat}
>            Reporter: Jiri Daněk
>            Priority: Minor
>         Attachments: LSan.supp
>
>
> Compile Proton and Dispatch with the Address Sanitizer option (c.f. DISPATCH-809) and
run ctest
> {noformat}
> # proton
> cmake .. -DBUILD_GO=OFF -DENABLE_SANITIZERS=ON -DCMAKE_INSTALL_PREFIX=../install_asan
-DCMAKE_BUILD_TYPE=Release -GNinja
> {noformat}
> {noformat}
> # dispatch
> cmake .. -DUSE_SANITIZERS=ON -DProton_DIR=`pwd`/../../qpid-proton/install_asan/lib64/cmake/Proton/
-DCMAKE_BUILD_TYPE=Release -GNinja
> LD_PRELOAD=/nix/store/zahs1kwq4742f6l6h7yy4mdj44zzc1kd-gcc-7-20170409-lib/lib/libasan.so
ASAN_OPTIONS=symbolize=1,color=always LSAN_OPTIONS=suppressions=`pwd`/../../qpid-proton/LSan.supp
ctest -VV
> {noformat}
> {noformat}
> [...]
> 9: Test Case parse_tree_tests.test_matches: PASS
> 9: Test Case parse_tree_tests.test_multiple_matches: PASS
> 9: 
> 9: =================================================================
> 9: ==25904==ERROR: LeakSanitizer: detected memory leaks
> 9: 
> 9: Direct leak of 48 byte(s) in 1 object(s) allocated from:
> 9:     #0 0x7fb5442cb050 in __interceptor_malloc (/nix/store/zahs1kwq4742f6l6h7yy4mdj44zzc1kd-gcc-7-20170409-lib/lib/libasan.so+0xd9050)
> 9:     #1 0x7fb543dd94fe in qdr_core_subscribe ../src/router_core/route_tables.c:149
> 9:     #2 0x7fb543d89ff0 in IoAdapter_init ../src/python_embedded.c:548
> 9:     #3 0x7fb542ba8ecd in type_call (/nix/store/1snk2wkpv97an87pk1842fgskl1vqhkr-python-2.7.14/lib/libpython2.7.so.1.0+0x9fecd)
> 9: 
> 9: -----------------------------------------------------
> 9: Suppressions used:
> 9:   count      bytes template
> 9:    1310    2021760 dictresize
> 9:     204     188272 _PyObject_GC_Malloc
> 9:      45      39369 PyString_FromStringAndSize
> 9:     308      15056 list_resize
> 9:      11       9784 PyString_FromString
> 9:       2       1280 _PyObject_GC_Resize
> 9:    1035      24104 PyList_New
> 9:      14        672 s_init
> 9:       1         32 PyThread_allocate_lock
> 9:      11      11097 type_new
> 9:       3       3984 unicode_resize
> 9:     179     204712 _PyUnicode_New.part.8
> 9:      11       8028 PyObject_Realloc
> 9:      37        120 _ctypes_alloc_format_string
> 9:       3      24576 set_table_resize
> 9: -----------------------------------------------------
> 9: 
> 9: SUMMARY: AddressSanitizer: 48 byte(s) leaked in 1 allocation(s).
>  9/36 Test  #9: unit_tests ................................***Failed    0.21 sec
> {noformat}
> The relevant functions are
> {code}
> static int IoAdapter_init(IoAdapter *self, PyObject *args, PyObject *kwds)
> {
>     PyObject *addr;
>     char aclass    = 'L';
>     char phase     = '0';
>     int  treatment = QD_TREATMENT_ANYCAST_CLOSEST;
>     if (!PyArg_ParseTuple(args, "OO|cci", &self->handler, &addr, &aclass,
&phase, &treatment))
>         return -1;
>     if (!PyCallable_Check(self->handler)) {
>         PyErr_SetString(PyExc_TypeError, "IoAdapter.__init__ handler is not callable");
>         return -1;
>     }
>     if (treatment == QD_TREATMENT_ANYCAST_BALANCED) {
>         PyErr_SetString(PyExc_TypeError, "IoAdapter: ANYCAST_BALANCED is not supported
for in-process subscriptions");
>         return -1;
>     }
>     Py_INCREF(self->handler);
>     self->qd   = dispatch;
>     self->core = qd_router_core(self->qd);
>     const char *address = PyString_AsString(addr);
>     if (!address) return -1;
>     qd_error_clear();
>     self->sub = qdr_core_subscribe(self->core, address, aclass, phase, treatment,
qd_io_rx_handler, self);
>     if (qd_error_code()) {
>         PyErr_SetString(PyExc_RuntimeError, qd_error_message());
>         return -1;
>     }
>     return 0;
> }
> {code}
> {code}
> static void IoAdapter_dealloc(IoAdapter* self)
> {
>     qdr_core_unsubscribe(self->sub);
>     Py_DECREF(self->handler);
>     self->ob_type->tp_free((PyObject*)self);
> }
> {code}
> {code}
> static PyTypeObject IoAdapterType = {
>     PyObject_HEAD_INIT(0)
>     0,                         /* ob_size*/
>     DISPATCH_MODULE ".IoAdapter",  /* tp_name*/
>     sizeof(IoAdapter),         /* tp_basicsize*/
>     0,                         /* tp_itemsize*/
>     (destructor)IoAdapter_dealloc, /* tp_dealloc*/
>     0,                         /* tp_print*/
>     0,                         /* tp_getattr*/
>     0,                         /* tp_setattr*/
>     0,                         /* tp_compare*/
>     0,                         /* tp_repr*/
>     0,                         /* tp_as_number*/
>     0,                         /* tp_as_sequence*/
>     0,                         /* tp_as_mapping*/
>     0,                         /* tp_hash */
>     0,                         /* tp_call*/
>     0,                         /* tp_str*/
>     0,                         /* tp_getattro*/
>     0,                         /* tp_setattro*/
>     0,                         /* tp_as_buffer*/
>     Py_TPFLAGS_DEFAULT,        /* tp_flags*/
>     "Dispatch IO Adapter",     /* tp_doc */
>     0,                         /* tp_traverse */
>     0,                         /* tp_clear */
>     0,                         /* tp_richcompare */
>     0,                         /* tp_weaklistoffset */
>     0,                         /* tp_iter */
>     0,                         /* tp_iternext */
>     IoAdapter_methods,         /* tp_methods */
>     0,                         /* tp_members */
>     0,                         /* tp_getset */
>     0,                         /* tp_base */
>     0,                         /* tp_dict */
>     0,                         /* tp_descr_get */
>     0,                         /* tp_descr_set */
>     0,                         /* tp_dictoffset */
>     (initproc)IoAdapter_init,  /* tp_init */
>     0,                         /* tp_alloc */
>     0,                         /* tp_new */
>     0,                         /* tp_free */
>     0,                         /* tp_is_gc */
>     0,                         /* tp_bases */
>     0,                         /* tp_mro */
>     0,                         /* tp_cache */
>     0,                         /* tp_subclasses */
>     0,                         /* tp_weaklist */
>     0,                         /* tp_del */
>     0                          /* tp_version_tag */
> };
> {code}
> I believe that there is indeed nothing that would free the {{sub}} field in {{IoAdapter}}.
> Depending on how this is triaged (real issue or not, I am myself a bit unsure about freeing
memory in relation to Python) I may have more reports coming.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message