diff options
author | Christian Grothoff <christian@grothoff.org> | 2013-12-18 10:08:50 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2013-12-18 10:08:50 +0000 |
commit | d594bbd28bc332595949950f371d0732a8ed02e2 (patch) | |
tree | dcd83b50cbd79d4af858acdb8e5d0c07884e4ede /src/transport/gnunet-service-transport_plugins.c | |
parent | db632b69c8c0b4265f154025bdd37c329eb2ae20 (diff) | |
download | gnunet-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.c | 13 |
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); |