(no commit message)
authorJean-Philippe Orsini <jeanfi@gmail.com>
Fri, 26 Apr 2013 06:44:23 +0000 (06:44 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Fri, 26 Apr 2013 06:44:23 +0000 (06:44 +0000)
src/http.c

index 52238ec..4438423 100644 (file)
@@ -20,6 +20,7 @@
 #include <libintl.h>
 #define _(str) gettext(str)
 
 #include <libintl.h>
 #define _(str) gettext(str)
 
+#include <pthread.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -35,6 +36,7 @@ struct ucontent {
 };
 
 static CURL *curl;
 };
 
 static CURL *curl;
+static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
 
 static size_t cbk_curl(void *buffer, size_t size, size_t nmemb, void *userp)
 {
 
 static size_t cbk_curl(void *buffer, size_t size, size_t nmemb, void *userp)
 {
@@ -67,10 +69,13 @@ void http_cleanup()
 char *http_get(const char *url, const char *content)
 {
        struct ucontent chunk;
 char *http_get(const char *url, const char *content)
 {
        struct ucontent chunk;
+       int result;
 
        chunk.data = malloc(1);
        chunk.len = 0;
 
 
        chunk.data = malloc(1);
        chunk.len = 0;
 
+       pthread_mutex_lock(&lock);
+
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
        if (content) {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
        if (content) {
@@ -82,7 +87,11 @@ char *http_get(const char *url, const char *content)
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cbk_curl);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
 
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cbk_curl);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
 
-       if (curl_easy_perform(curl) == CURLE_OK)
+       result = curl_easy_perform(curl);
+
+       pthread_mutex_unlock(&lock);
+
+       if (result == CURLE_OK)
                return chunk.data;
 
        free(chunk.data);
                return chunk.data;
 
        free(chunk.data);