#define K_SERVICE_THREAD "__K_SERVICE_THREAD"
+#define AUL_CTOR __attribute__ ((constructor))
+#define AUL_DTOR __attribute__ ((destructor))
+
typedef struct client_channel_s {
int fd;
pid_t pid;
static launch_context __context;
+AUL_CTOR static void __aul_constructor(void)
+{
+ g_rec_mutex_init(&__context.mutex);
+}
+
+AUL_DTOR static void __aul_destructor(void)
+{
+ if (g_rec_mutex_trylock(&__context.mutex))
+ g_rec_mutex_unlock(&__context.mutex);
+
+ g_rec_mutex_clear(&__context.mutex);
+}
+
static void __destroy_client_channel(gpointer data)
{
client_channel_t *channel = data;
static void __finalize_context(void)
{
- if (!__context.initialized)
+ g_rec_mutex_lock(&__context.mutex);
+ if (!__context.initialized) {
+ g_rec_mutex_unlock(&__context.mutex);
return;
+ }
__context.touch_argv_handler = false;
__context.tizen_context = NULL;
}
- g_rec_mutex_lock(&__context.mutex);
if (__context.clients) {
g_list_free_full(__context.clients, __destroy_client_channel);
__context.clients = NULL;
}
- g_rec_mutex_unlock(&__context.mutex);
- g_rec_mutex_clear(&__context.mutex);
-
__context.initialized = false;
+ g_rec_mutex_unlock(&__context.mutex);
}
static GMainContext *__get_tizen_glib_context(void)
return fd;
}
- g_rec_mutex_init(&__context.mutex);
-
context = __get_tizen_glib_context();
if (context)
__context.tizen_context = g_main_context_ref(context);
API int aul_launch_init(aul_handler_fn callback, void *user_data)
{
+ int ret;
+
+ g_rec_mutex_lock(&__context.mutex);
if (callback) {
__context.aul.callback = callback;
__context.aul.user_data = user_data;
}
- return __initialize_context();
+ ret = __initialize_context();
+ g_rec_mutex_unlock(&__context.mutex);
+
+ return ret;
}
API int aul_launch_fini(void)