lib: made API multi thread safe(untested)
[platform/core/appfw/message-port-dbus.git] / lib / msgport-factory.c
1 #include "msgport-factory.h"
2 #include "msgport-manager.h"
3 #include <glib.h>
4
5 GHashTable *__managers ; /* GThread:MsgPortManager */
6 G_LOCK_DEFINE(managers);
7
8 static 
9 void msgport_factory_init ()
10 {
11     G_LOCK(managers);
12
13     if (!__managers)
14         __managers = g_hash_table_new_full (g_direct_hash, g_direct_equal,
15                               NULL, (GDestroyNotify)g_object_unref);
16
17     G_UNLOCK(managers);
18 }
19
20 void msgport_factory_uninit ()
21 {
22     G_LOCK(managers);
23
24     if (__managers) {
25         g_hash_table_destroy (__managers);
26         __managers = NULL;
27     }
28
29     G_UNLOCK(managers);
30 }
31
32 MsgPortManager * msgport_factory_get_manager () 
33 {
34     MsgPortManager *manager = NULL;
35     GThread *self_thread = g_thread_self ();
36
37     if (!__managers) msgport_factory_init ();
38
39     G_LOCK(managers);
40
41     manager = MSGPORT_MANAGER (g_hash_table_lookup (__managers, self_thread));
42
43     if (!manager) {
44         manager = msgport_manager_new ();
45
46         if (manager) 
47             g_hash_table_insert (__managers, (gpointer)self_thread, manager);
48     }
49
50     G_UNLOCK(managers);
51
52     return manager;
53 }
54