about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/tools/http_upload.c21
-rw-r--r--src/tools/http_upload.h5
-rw-r--r--src/ui/window_list.c11
-rw-r--r--src/xmpp/iq.c2
4 files changed, 27 insertions, 12 deletions
diff --git a/src/tools/http_upload.c b/src/tools/http_upload.c
index 79ed006c..f126a72d 100644
--- a/src/tools/http_upload.c
+++ b/src/tools/http_upload.c
@@ -65,6 +65,7 @@ struct curl_data_t {
     size_t size;
 };
 
+GSList *upload_processes = NULL;
 
 static int
 _xferinfo(void *userdata, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
@@ -332,3 +333,23 @@ off_t file_size(const char* const filename)
     stat(filename, &st);
     return st.st_size;
 }
+
+void
+http_upload_cancel_processes(ProfWin *window)
+{
+    GSList *upload_process = upload_processes;
+    while (upload_process) {
+        HTTPUpload *upload = upload_process->data;
+        if (upload->window == window) {
+            upload->cancel = 1;
+            break;
+        }
+        upload_process = g_slist_next(upload_process);
+    }
+}
+
+void
+http_upload_add_upload(HTTPUpload *upload)
+{
+    upload_processes = g_slist_append(upload_processes, upload);
+}
diff --git a/src/tools/http_upload.h b/src/tools/http_upload.h
index b9b46ca7..60b1ea82 100644
--- a/src/tools/http_upload.h
+++ b/src/tools/http_upload.h
@@ -57,11 +57,12 @@ typedef struct http_upload_t {
     int cancel;
 } HTTPUpload;
 
-GSList *upload_processes;
-
 void* http_file_put(void *userdata);
 
 char* file_mime_type(const char* const file_name);
 off_t file_size(const char* const file_name);
 
+void http_upload_cancel_processes(ProfWin *window);
+void http_upload_add_upload(HTTPUpload *upload);
+
 #endif
diff --git a/src/ui/window_list.c b/src/ui/window_list.c
index dd065c25..09b165e2 100644
--- a/src/ui/window_list.c
+++ b/src/ui/window_list.c
@@ -50,6 +50,7 @@
 #include "ui/window_list.h"
 #include "xmpp/xmpp.h"
 #include "xmpp/roster_list.h"
+#include "tools/http_upload.h"
 
 static GHashTable *windows;
 static int current;
@@ -519,15 +520,7 @@ wins_close_by_num(int i)
         ProfWin *window = wins_get_by_num(i);
         if (window) {
             // cancel upload proccesses of this window
-            GSList *upload_process = upload_processes;
-            while (upload_process) {
-                HTTPUpload *upload = upload_process->data;
-                if (upload->window == window) {
-                    upload->cancel = 1;
-                    break;
-                }
-                upload_process = g_slist_next(upload_process);
-            }
+            http_upload_cancel_processes(window);
 
             switch (window->type) {
             case WIN_CHAT:
diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c
index 0559e10a..58e10e98 100644
--- a/src/xmpp/iq.c
+++ b/src/xmpp/iq.c
@@ -2402,7 +2402,7 @@ _http_upload_response_id_handler(xmpp_stanza_t *const stanza, void *const userda
             if (get_url) xmpp_free(ctx, get_url);
 
             pthread_create(&(upload->worker), NULL, &http_file_put, upload);
-            upload_processes = g_slist_append(upload_processes, upload);
+            http_upload_add_upload(upload);
         } else {
             log_error("Invalid XML in HTTP Upload slot");
             return 1;