X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Fmodule.c;h=a1826b91430e2255396d4f6a9f82278bc8c0772f;hb=dbd243b1b5f764129ae8bcf95432df750bec4a8b;hp=3ebd3a33e6e63f8116be71148858ce3f3896d72a;hpb=8b0bbe19ccf2d978bb68b3c78f5d08b0b6899c8d;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/module.c b/ltt/branches/poly/lttv/lttv/module.c index 3ebd3a33..a1826b91 100644 --- a/ltt/branches/poly/lttv/lttv/module.c +++ b/ltt/branches/poly/lttv/lttv/module.c @@ -70,7 +70,7 @@ static GQuark lttv_module_error; static void init(); -static finish_destroy(); +static void finish_destroy(); static void module_release(LttvModule *m); @@ -129,16 +129,17 @@ static void library_remove(LttvLibrary *l) LttvModule *m; GPtrArray *modules; - + GPtrArray **modules_ptr = &modules; /* for strict aliasing */ guint i; char *key; + char **key_ptr = &key; /* for strict aliasing */ for(i = 0 ; i < l->modules->len ; i++) { m = (LttvModule *)(l->modules->pdata[i]); g_hash_table_lookup_extended(modules_by_name, m->info.name, - (gpointer *)&key, (gpointer *)&modules); + (gpointer *)key_ptr, (gpointer *)modules_ptr); g_assert(modules != NULL); g_ptr_array_remove(modules, m); if(modules->len == 0) { @@ -162,11 +163,12 @@ static void library_remove(LttvLibrary *l) static LttvLibrary *library_load(char *name, GError **error) { - GModule *gm; + GModule *gm = NULL; int i, nb; - char *path, *pathname; + /* path is always initialized, checked */ + char *path = NULL, *pathname; LttvLibrary *l; @@ -234,7 +236,7 @@ LttvLibrary *lttv_library_load(char *name, GError **error) static void library_unload(LttvLibrary *l) { - guint i, len; + guint i; GModule *gm; @@ -277,7 +279,9 @@ static void library_unload(LttvLibrary *l) void lttv_library_unload(LttvLibrary *l) { - l->info.load_count--; + /* In the case where we wait for a module to release, the load count is 0 + * and should not be decremented. */ + if(l->info.load_count != 0) l->info.load_count--; library_unload(l); } @@ -520,7 +524,7 @@ static void init() } -static finish_destroy() +static void finish_destroy() { guint i;