aboutsummaryrefslogtreecommitdiff
path: root/src/rest
diff options
context:
space:
mode:
authorMartin Schanzenbach <mschanzenbach@posteo.de>2020-08-06 23:06:16 +0200
committerMartin Schanzenbach <mschanzenbach@posteo.de>2020-08-06 23:06:16 +0200
commit7648cde6cfb181f03df9e145a576430220234f5f (patch)
tree987badd6024e09608b47e72f56052cf79f67b405 /src/rest
parent19fe8e8ff74a9639fc075f5d974a01a977e1196a (diff)
downloadgnunet-7648cde6cfb181f03df9e145a576430220234f5f.tar.gz
gnunet-7648cde6cfb181f03df9e145a576430220234f5f.zip
-improve request cleanup handling
Diffstat (limited to 'src/rest')
-rw-r--r--src/rest/plugin_rest_config.c31
-rw-r--r--src/rest/plugin_rest_copying.c28
2 files changed, 56 insertions, 3 deletions
diff --git a/src/rest/plugin_rest_config.c b/src/rest/plugin_rest_config.c
index e5d0fffb0..af833efff 100644
--- a/src/rest/plugin_rest_config.c
+++ b/src/rest/plugin_rest_config.c
@@ -45,6 +45,16 @@ const struct GNUNET_CONFIGURATION_Handle *cfg;
45struct RequestHandle 45struct RequestHandle
46{ 46{
47 /** 47 /**
48 * DLL
49 */
50 struct RequestHandle *next;
51
52 /**
53 * DLL
54 */
55 struct RequestHandle *prev;
56
57 /**
48 * Handle to rest request 58 * Handle to rest request
49 */ 59 */
50 struct GNUNET_REST_RequestHandle *rest_handle; 60 struct GNUNET_REST_RequestHandle *rest_handle;
@@ -70,6 +80,17 @@ struct RequestHandle
70 char *url; 80 char *url;
71}; 81};
72 82
83/**
84 * DLL
85 */
86static struct RequestHandle *requests_head;
87
88/**
89 * DLL
90 */
91static struct RequestHandle *requests_tail;
92
93
73 94
74/** 95/**
75 * Cleanup request handle. 96 * Cleanup request handle.
@@ -82,6 +103,9 @@ cleanup_handle (struct RequestHandle *handle)
82 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n"); 103 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Cleaning up\n");
83 if (NULL != handle->url) 104 if (NULL != handle->url)
84 GNUNET_free (handle->url); 105 GNUNET_free (handle->url);
106 GNUNET_CONTAINER_DLL_remove (requests_head,
107 requests_tail,
108 handle);
85 GNUNET_free (handle); 109 GNUNET_free (handle);
86} 110}
87 111
@@ -367,7 +391,9 @@ rest_config_process_request (struct GNUNET_REST_RequestHandle *conndata_handle,
367 handle->url = GNUNET_strdup (conndata_handle->url); 391 handle->url = GNUNET_strdup (conndata_handle->url);
368 if (handle->url[strlen (handle->url) - 1] == '/') 392 if (handle->url[strlen (handle->url) - 1] == '/')
369 handle->url[strlen (handle->url) - 1] = '\0'; 393 handle->url[strlen (handle->url) - 1] = '\0';
370 394 GNUNET_CONTAINER_DLL_insert (requests_head,
395 requests_tail,
396 handle);
371 if (GNUNET_NO == 397 if (GNUNET_NO ==
372 GNUNET_REST_handle_request (conndata_handle, handlers, &err, handle)) 398 GNUNET_REST_handle_request (conndata_handle, handlers, &err, handle))
373 { 399 {
@@ -415,8 +441,9 @@ libgnunet_plugin_rest_config_done (void *cls)
415 struct GNUNET_REST_Plugin *api = cls; 441 struct GNUNET_REST_Plugin *api = cls;
416 struct Plugin *plugin; 442 struct Plugin *plugin;
417 443
444 while (NULL != requests_head)
445 cleanup_handle (requests_head);
418 plugin = api->cls; 446 plugin = api->cls;
419
420 plugin->cfg = NULL; 447 plugin->cfg = NULL;
421 GNUNET_free (api); 448 GNUNET_free (api);
422 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "CONFIG REST plugin is finished\n"); 449 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "CONFIG REST plugin is finished\n");
diff --git a/src/rest/plugin_rest_copying.c b/src/rest/plugin_rest_copying.c
index 1649da3bb..6d074d3d1 100644
--- a/src/rest/plugin_rest_copying.c
+++ b/src/rest/plugin_rest_copying.c
@@ -46,6 +46,16 @@ const struct GNUNET_CONFIGURATION_Handle *cfg;
46struct RequestHandle 46struct RequestHandle
47{ 47{
48 /** 48 /**
49 * DLL
50 */
51 struct RequestHandle *next;
52
53 /**
54 * DLL
55 */
56 struct RequestHandle *prev;
57
58 /**
49 * Handle to rest request 59 * Handle to rest request
50 */ 60 */
51 struct GNUNET_REST_RequestHandle *rest_handle; 61 struct GNUNET_REST_RequestHandle *rest_handle;
@@ -66,6 +76,15 @@ struct RequestHandle
66 int response_code; 76 int response_code;
67}; 77};
68 78
79/**
80 * DLL
81 */
82static struct RequestHandle *requests_head;
83
84/**
85 * DLL
86 */
87static struct RequestHandle *requests_tail;
69 88
70/** 89/**
71 * Cleanup request handle. 90 * Cleanup request handle.
@@ -77,6 +96,9 @@ cleanup_handle (struct RequestHandle *handle)
77{ 96{
78 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 97 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
79 "Cleaning up\n"); 98 "Cleaning up\n");
99 GNUNET_CONTAINER_DLL_remove (requests_head,
100 requests_tail,
101 handle);
80 GNUNET_free (handle); 102 GNUNET_free (handle);
81} 103}
82 104
@@ -153,7 +175,9 @@ rest_copying_process_request (struct GNUNET_REST_RequestHandle *conndata_handle,
153 handle->proc_cls = proc_cls; 175 handle->proc_cls = proc_cls;
154 handle->proc = proc; 176 handle->proc = proc;
155 handle->rest_handle = conndata_handle; 177 handle->rest_handle = conndata_handle;
156 178 GNUNET_CONTAINER_DLL_insert (requests_head,
179 requests_tail,
180 handle);
157 return GNUNET_REST_handle_request (conndata_handle, 181 return GNUNET_REST_handle_request (conndata_handle,
158 handlers, 182 handlers,
159 &err, 183 &err,
@@ -201,6 +225,8 @@ libgnunet_plugin_rest_copying_done (void *cls)
201 struct GNUNET_REST_Plugin *api = cls; 225 struct GNUNET_REST_Plugin *api = cls;
202 struct Plugin *plugin = api->cls; 226 struct Plugin *plugin = api->cls;
203 227
228 while (NULL != requests_head)
229 cleanup_handle (requests_head);
204 plugin->cfg = NULL; 230 plugin->cfg = NULL;
205 GNUNET_free (api); 231 GNUNET_free (api);
206 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 232 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,