GAsyncReadyCallback callback;
GVariant *result;
gpointer user_data;
+ guint timeout_id;
} gdbus_result_data_s;
static gdbus_result_data_s _gdbus_async_result;
_gdbus_async_result.callback = callback;
_gdbus_async_result.result = __make_scan_result();
_gdbus_async_result.user_data = user_data;
- g_timeout_add(ASYNC_RESULT_DELAY, __reply_async_method, &_gdbus_async_result);
+ _gdbus_async_result.timeout_id = g_timeout_add(
+ ASYNC_RESULT_DELAY, __reply_async_method, &_gdbus_async_result);
}
static GVariant *__property_device_role()
GVariant *_get_gdbus_async_result(GError **error)
{
*error = nullptr;
+ if (_gdbus_async_result.timeout_id > 0)
+ {
+ g_source_remove(_gdbus_async_result.timeout_id);
+ _gdbus_async_result.timeout_id = 0;
+ }
return _gdbus_async_result.result;
}
\ No newline at end of file
#include "thread-mock-util.h"
-static gboolean _timeoutCallback(gpointer data)
-{
- GMainLoop *mainLoop = NULL;
- mainLoop = (GMainLoop *)data;
- if (mainLoop != NULL)
- g_main_loop_quit(mainLoop);
- return FALSE;
-}
-
void ScanCallback(int result, thread_network_scanning_state_e state,
uint64_t ext_address, const char *network_name, uint64_t ext_panidi,
const uint8_t *steering_data, int length, uint16_t panid, uint16_t joiner_udp_port, uint16_t channel,
QUIT_GMAIN_LOOP;
}
+gboolean ThreadMainLoop::timeoutCallback(gpointer data)
+{
+ GMainLoop *mainLoop = NULL;
+ mainLoop = (GMainLoop *)data;
+ if (mainLoop != NULL)
+ {
+ g_main_loop_quit(mainLoop);
+ THREAD_MAIN_LOOP.timeoutId = 0;
+ }
+ return FALSE;
+}
+
void ThreadMainLoop::RunMainLoop()
{
mainLoop = g_main_loop_new(NULL, false);
- timeoutId = g_timeout_add(CALLBACK_TIMEOUT, _timeoutCallback, mainLoop);
+ timeoutId = g_timeout_add(CALLBACK_TIMEOUT, timeoutCallback, mainLoop);
g_main_loop_run(mainLoop);
if (timeoutId > 0)
g_source_remove(timeoutId);