Fix crashes when terminating threads 41/162241/3 accepted/tizen/4.0/unified/20171130.063650 submit/tizen_4.0/20171129.225807
authorchanywa <cbible.kim@samsung.com>
Thu, 30 Nov 2017 01:29:40 +0000 (10:29 +0900)
committerchanywa <cbible.kim@samsung.com>
Thu, 30 Nov 2017 01:41:47 +0000 (10:41 +0900)
Change-Id: I64000745192439b5e564e82824eb27322a3881eb
Signed-off-by: chanywa <cbible.kim@samsung.com>
maps-plugin-mapzen.changes
packaging/maps-plugin-mapzen.spec
src/mapzen/mapzen_restcurl.c

index 585f2d2..107e3e6 100644 (file)
@@ -1,3 +1,8 @@
+[Version]   maps-plugin-mapzen_0.0.8
+[Date]      30 Nov 2017
+[Title]     Fix crashes when terminating threads
+[Developer] Seechan Kim <cbible.kim@samsung.com>
+
 [Version]   maps-plugin-mapzen_0.0.6
 [Date]      30 Oct 2017
 [Title]     Revise timeout limits for downloading map tiles.
index bfc045d..85b6264 100644 (file)
@@ -1,6 +1,6 @@
 Name:       maps-plugin-mapzen
 Summary:    Tizen Mapzen Maps Plug-in Library
-Version:    0.0.6
+Version:    0.0.8
 Release:    1
 Group:      Location/Libraries
 License:    Apache-2.0 and MIT
index 913a717..91b799d 100644 (file)
@@ -26,6 +26,7 @@
 #include "mapzen_util.h"
 
 #define RESTCURL_USE_MULTI_CURL
+#define TIZEN_CFG_CURL_TIMEOUT 120
 
 CURLM *__cm_handle;
 pthread_t __CurlThread;
@@ -419,6 +420,9 @@ int add_handle(const char *url, mapzen_req_type type, void *user_data)
        /* some servers don't like requests that are made without a user-agent field, so we provide one */
        curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
 
+       /* Timeout for the entire request */
+       curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, TIZEN_CFG_CURL_TIMEOUT);
+
        pMultiCurlArg->curl_handle = curl_handle;
        pMultiCurlArg->req_type = type;
        pMultiCurlArg->request_id = req_id;
@@ -473,7 +477,7 @@ static void __post_curl(mapzen_req_type type, MemoryStruct_s *m_chunk, void *use
 
 static void *__curl_thread_handler(void *user_data)
 {
-       __thread_running_for_curlmulti = true;
+       //__thread_running_for_curlmulti = true;
        pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
 
 #ifdef RESTCURL_USE_MULTI_CURL
@@ -537,11 +541,10 @@ static void *__curl_thread_handler(void *user_data)
                        }
                }
 
-               if (__thread_running_for_curlmulti && !__MultiCurlArgsRemain) {
-                       pthread_mutex_lock(&__curl_deliver_mutex);
+               pthread_mutex_lock(&__curl_deliver_mutex);
+               if (__thread_running_for_curlmulti && !__MultiCurlArgsRemain)
                        pthread_cond_wait(&__curl_delivered_cond, &__curl_deliver_mutex);
-                       pthread_mutex_unlock(&__curl_deliver_mutex);
-               }
+               pthread_mutex_unlock(&__curl_deliver_mutex);
        }
 
 #else
@@ -597,10 +600,9 @@ int init_curl()
 int deinit_curl()
 {
 #ifdef RESTCURL_USE_MULTI_CURL
+       pthread_mutex_lock(&__curl_deliver_mutex);
        __thread_running_for_curlmulti = false;
        __MultiCurlArgsRemain = 0;
-
-       pthread_mutex_lock(&__curl_deliver_mutex);
        pthread_cond_signal(&__curl_delivered_cond);
        pthread_mutex_unlock(&__curl_deliver_mutex);