[Bug fix] Modified transaction list 96/106496/2 accepted/tizen/common/20161222.131134 accepted/tizen/mobile/20161223.094940 accepted/tizen/wearable/20161223.095009 submit/tizen/20161222.015926
authorSeonah Moon <seonah1.moon@samsung.com>
Thu, 24 Nov 2016 09:31:19 +0000 (18:31 +0900)
committerseonah moon <seonah1.moon@samsung.com>
Thu, 22 Dec 2016 02:12:05 +0000 (18:12 -0800)
Change-Id: Id7e7df39482e3a47870080f83b50887eb22dd4d0
Signed-off-by: Seonah Moon <seonah1.moon@samsung.com>
include/http_private.h
packaging/capi-network-http.spec
src/http_session.c
src/http_transaction.c

index 74572d980510a3760eeb78840e490423fd3dbb1b..faf6d6456274daa5fc76bf3aaa3a112b1a437d63 100644 (file)
@@ -216,6 +216,7 @@ int _generate_session_id(void);
 void _add_transaction_to_list(http_transaction_h http_transaction);
 void _remove_transaction_from_list(http_transaction_h http_transaction);
 void _remove_transaction_list(void);
+void _destroy_transactions(int session_id);
 curl_http_auth_scheme_e _get_http_curl_auth_scheme(http_auth_scheme_e auth_scheme);
 http_auth_scheme_e _get_http_auth_scheme(bool proxy_auth, curl_http_auth_scheme_e curl_auth_scheme);
 int _set_authentication_info(http_transaction_h http_transaction);
index c2df533ae566d0c05d02da4527dd9cf41a74d53e..91f66e8062c30265b173baa23d57fd37046c1ecc 100644 (file)
@@ -1,6 +1,6 @@
 Name:          capi-network-http
 Summary:       Http Framework
-Version:       0.0.18
+Version:       0.0.19
 Release:       0
 Group:         System/Network
 License:       Apache-2.0
index 01c7d8d33da2bd503462d788ed6f31891a4c1f2e..39b55e54e052718e034e06cd955adb81ac61db43 100644 (file)
@@ -189,6 +189,9 @@ API int http_session_destroy(http_session_h http_session)
                        session->multi_handle = NULL;
                }
 
+               if (session->active_transaction_count)
+                       _destroy_transactions(session->session_id);
+
                session->active_transaction_count = 0;
                session->still_running = 0;
                session->auto_redirect = FALSE;
@@ -263,3 +266,18 @@ API int http_session_get_max_transaction_count(http_session_h http_session, int
 
        return HTTP_ERROR_NONE;
 }
+
+API int http_session_destroy_all_transactions(http_session_h http_session)
+{
+       _retvm_if(_http_is_init() == false, HTTP_ERROR_INVALID_OPERATION,
+                       "http isn't initialized");
+       _retvm_if(http_session == NULL, HTTP_ERROR_INVALID_PARAMETER,
+                       "parameter(http_session) is NULL\n");
+
+       __http_session_h *session = (__http_session_h *)http_session;
+
+       _destroy_transactions(session->session_id);
+
+       return HTTP_ERROR_NONE;
+}
+
index f2b4fcf7dc5f3fed30247b466965b783c86b84f2..a1feb4251382793a41a89baf7efcbc588c16d7c7 100644 (file)
 #include "http.h"
 #include "http_private.h"
 
-static __thread GSList *transaction_list = NULL;
+static __thread GList *transaction_list = NULL;
 
 //LCOV_EXCL_START
 void _add_transaction_to_list(http_transaction_h http_transaction)
 {
-       transaction_list = g_slist_append(transaction_list, http_transaction);
+       transaction_list = g_list_append(transaction_list, http_transaction);
 }
 
 void _remove_transaction_from_list(http_transaction_h http_transaction)
 {
-       transaction_list = g_slist_remove(transaction_list, http_transaction);
+       transaction_list = g_list_remove(transaction_list, http_transaction);
 }
 
 void _remove_transaction_list(void)
 {
-       g_slist_free_full(transaction_list, g_free);
+       g_list_free_full(transaction_list, g_free);
        transaction_list = NULL;
 }
+
+void _destroy_transactions(int session_id)
+{
+       int ret = 0;
+       GList *list = transaction_list;
+
+       while (list) {
+               __http_transaction_h *transaction = (__http_transaction_h *)list->data;
+               if (session_id == transaction->session->session_id) {
+                       DBG("PREV[%p] NEXT[%p]", list->prev, list->next);
+                       if (list->prev)
+                               list = list->prev;
+                       else
+                               list = list->next;
+
+                       ret = http_transaction_destroy((http_transaction_h) transaction);
+                       if (ret != HTTP_ERROR_NONE)
+                               ERR("Fail to destroy transaction!!");
+
+                       continue;
+               }
+               list = list->next;
+       }
+}
 //LCOV_EXCL_STOP
 
 curl_socket_t __handle_opensocket_cb(void *client_fd, curlsocktype purpose, struct curl_sockaddr *address)
@@ -992,31 +1016,6 @@ API int http_transaction_set_server_certificate_verification(http_transaction_h
        return HTTP_ERROR_NONE;
 }
 
-API int http_session_destroy_all_transactions(http_session_h http_session)
-{
-       _retvm_if(_http_is_init() == false, HTTP_ERROR_INVALID_OPERATION,
-                       "http isn't initialized");
-       _retvm_if(http_session == NULL, HTTP_ERROR_INVALID_PARAMETER,
-                       "parameter(http_session) is NULL\n");
-
-       int ret = 0;
-       GSList *list = NULL;
-       __http_session_h *session = (__http_session_h *)http_session;
-
-       for (list = transaction_list; list; list = list->next) {
-               __http_transaction_h *transaction = (__http_transaction_h *)list->data;
-               if (session->session_id == transaction->session->session_id) {
-                       _remove_transaction_from_list(list->data);
-                       ret = http_transaction_destroy((http_transaction_h) transaction);
-                       if (ret != HTTP_ERROR_NONE) {
-                               ERR("Fail to destroy transaction!!");
-                               return HTTP_ERROR_OPERATION_FAILED;
-                       }
-               }
-       }
-
-       return HTTP_ERROR_NONE;
-}
 //LCOV_EXCL_START
 API int http_transaction_set_http_auth_scheme(http_transaction_h http_transaction, http_auth_scheme_e auth_scheme)
 {