mirror of https://github.com/labapart/gattlib
gattlib_on_disconnected_device: Make callback synchronous
parent
2518348023
commit
118dc961d6
|
@ -28,24 +28,19 @@ void gattlib_disconnected_device_python_callback(gatt_connection_t* connection,
|
||||||
PyGILState_Release(d_gstate);
|
PyGILState_Release(d_gstate);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer _gattlib_disconnected_device_thread(gpointer data) {
|
|
||||||
gatt_connection_t* connection = data;
|
|
||||||
|
|
||||||
connection->on_disconnection.callback.disconnection_handler(connection, connection->on_disconnection.user_data);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void* _disconnected_device_thread_args_allocator(va_list args) {
|
|
||||||
gatt_connection_t* connection = va_arg(args, gatt_connection_t*);
|
|
||||||
return connection;
|
|
||||||
}
|
|
||||||
|
|
||||||
void gattlib_on_disconnected_device(gatt_connection_t* connection) {
|
void gattlib_on_disconnected_device(gatt_connection_t* connection) {
|
||||||
gattlib_handler_dispatch_to_thread(
|
if (connection->on_disconnection.callback.callback == NULL) {
|
||||||
&connection->on_disconnection,
|
// We do not have (anymore) a callback, nothing to do
|
||||||
gattlib_disconnected_device_python_callback /* python_callback */,
|
GATTLIB_LOG(GATTLIB_DEBUG, "No callback for GATT disconnection.");
|
||||||
_gattlib_disconnected_device_thread /* thread_func */,
|
return;
|
||||||
"gattlib_disconnected_device" /* thread_name */,
|
}
|
||||||
_disconnected_device_thread_args_allocator /* thread_args_allocator */,
|
|
||||||
connection);
|
// Check if we are using the Python callback, in case of Python argument we keep track of the argument to free them
|
||||||
|
// once we are done with the handler.
|
||||||
|
if ((gattlib_disconnection_handler_t)connection->on_disconnection.callback.callback == gattlib_disconnected_device_python_callback) {
|
||||||
|
connection->on_disconnection.python_args = connection->on_disconnection.user_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For GATT disconnection we do not use thread to ensure the callback is synchronous.
|
||||||
|
connection->on_disconnection.callback.disconnection_handler(connection, connection->on_disconnection.user_data);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue