aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-service-transport_plugins.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-12-18 10:08:50 +0000
committerChristian Grothoff <christian@grothoff.org>2013-12-18 10:08:50 +0000
commitd594bbd28bc332595949950f371d0732a8ed02e2 (patch)
treedcd83b50cbd79d4af858acdb8e5d0c07884e4ede /src/transport/gnunet-service-transport_plugins.c
parentdb632b69c8c0b4265f154025bdd37c329eb2ae20 (diff)
downloadgnunet-d594bbd28bc332595949950f371d0732a8ed02e2.tar.gz
gnunet-d594bbd28bc332595949950f371d0732a8ed02e2.zip
-properly unload incomplete plugins
Diffstat (limited to 'src/transport/gnunet-service-transport_plugins.c')
-rw-r--r--src/transport/gnunet-service-transport_plugins.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/transport/gnunet-service-transport_plugins.c b/src/transport/gnunet-service-transport_plugins.c
index 71cf6a2c4..8df133046 100644
--- a/src/transport/gnunet-service-transport_plugins.c
+++ b/src/transport/gnunet-service-transport_plugins.c
@@ -120,14 +120,16 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
120 GNUNET_CONFIGURATION_get_value_string (GST_cfg, "TRANSPORT", "PLUGINS", 120 GNUNET_CONFIGURATION_get_value_string (GST_cfg, "TRANSPORT", "PLUGINS",
121 &plugs)) 121 &plugs))
122 return; 122 return;
123 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Starting transport plugins `%s'\n"), 123 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
124 _("Starting transport plugins `%s'\n"),
124 plugs); 125 plugs);
125 for (pos = strtok (plugs, " "); pos != NULL; pos = strtok (NULL, " ")) 126 for (pos = strtok (plugs, " "); pos != NULL; pos = strtok (NULL, " "))
126 { 127 {
127 GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading `%s' transport plugin\n"), 128 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
129 _("Loading `%s' transport plugin\n"),
128 pos); 130 pos);
129 GNUNET_asprintf (&libname, "libgnunet_plugin_transport_%s", pos); 131 GNUNET_asprintf (&libname, "libgnunet_plugin_transport_%s", pos);
130 plug = GNUNET_malloc (sizeof (struct TransportPlugin)); 132 plug = GNUNET_new (struct TransportPlugin);
131 plug->short_name = GNUNET_strdup (pos); 133 plug->short_name = GNUNET_strdup (pos);
132 plug->lib_name = libname; 134 plug->lib_name = libname;
133 plug->env.cfg = GST_cfg; 135 plug->env.cfg = GST_cfg;
@@ -151,7 +153,7 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
151 plug = next; 153 plug = next;
152 next = plug->next; 154 next = plug->next;
153 plug->api = GNUNET_PLUGIN_load (plug->lib_name, &plug->env); 155 plug->api = GNUNET_PLUGIN_load (plug->lib_name, &plug->env);
154 if (plug->api == NULL) 156 if (NULL == plug->api)
155 { 157 {
156 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 158 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
157 _("Failed to load transport plugin for `%s'\n"), 159 _("Failed to load transport plugin for `%s'\n"),
@@ -237,7 +239,7 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
237 } 239 }
238 if (NULL == plug->api->query_keepalive_factor) 240 if (NULL == plug->api->query_keepalive_factor)
239 { 241 {
240 fail = GNUNET_YES; 242 fail = GNUNET_YES;
241 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 243 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
242 _("Missing function `%s' in transport plugin for `%s'\n"), 244 _("Missing function `%s' in transport plugin for `%s'\n"),
243 "query_keepalive_factor", 245 "query_keepalive_factor",
@@ -248,6 +250,7 @@ GST_plugins_load (GNUNET_TRANSPORT_PluginReceiveCallback recv_cb,
248 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 250 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
249 _("Did not load plugin `%s' due to missing functions\n"), 251 _("Did not load plugin `%s' due to missing functions\n"),
250 plug->lib_name); 252 plug->lib_name);
253 GNUNET_break (NULL == GNUNET_PLUGIN_unload (plug->lib_name, plug->api));
251 GNUNET_CONTAINER_DLL_remove (plugins_head, plugins_tail, plug); 254 GNUNET_CONTAINER_DLL_remove (plugins_head, plugins_tail, plug);
252 GNUNET_free (plug->short_name); 255 GNUNET_free (plug->short_name);
253 GNUNET_free (plug->lib_name); 256 GNUNET_free (plug->lib_name);