From d0b30c2f806ee871f3113fd6ad2dedd737925ad5 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 25 Oct 2017 16:17:47 +0300 Subject: [PATCH] gatt: Fix crash when disconnecting svc_chngd_ccc don't actually set a callback thus when cleaning up in clear_ccc_state has to check if there is any callback set: invalid address stated on the next line at 0x0: ??? by 0x475C7C: clear_ccc_state (gatt-database.c:287) by 0x4D28CF: queue_foreach (queue.c:220) by 0x475FE7: att_disconnected (gatt-database.c:310) by 0x4D7255: disconn_handler (att.c:538) by 0x4D28CF: queue_foreach (queue.c:220) by 0x4D8F39: disconnect_cb (att.c:590) by 0x4E6B3A: watch_callback (io-glib.c:170) by 0x50CD246: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.5200.3) by 0x50CD5E7: ??? (in /usr/lib64/libglib-2.0.so.0.5200.3) by 0x50CD901: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.5200.3) by 0x40CD90: main (main.c:770) Address 0x0 is not stack'd, malloc'd or (recently) free'd --- src/gatt-database.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gatt-database.c b/src/gatt-database.c index 6784998c3..a1e8ff346 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c @@ -284,7 +284,8 @@ static void clear_ccc_state(void *data, void *user_data) if (!ccc_cb) return; - ccc_cb->callback(NULL, 0, ccc_cb->user_data); + if (ccc_cb->callback) + ccc_cb->callback(NULL, 0, ccc_cb->user_data); } static void att_disconnected(int err, void *user_data) -- 2.47.3