diff options
Diffstat (limited to 'src/rest/plugin_rest_copying.c')
-rw-r--r-- | src/rest/plugin_rest_copying.c | 28 |
1 files changed, 27 insertions, 1 deletions
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; | |||
46 | struct RequestHandle | 46 | struct 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 | */ | ||
82 | static struct RequestHandle *requests_head; | ||
83 | |||
84 | /** | ||
85 | * DLL | ||
86 | */ | ||
87 | static 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, |