gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r5095 - GNUnet/src/transports


From: gnunet
Subject: [GNUnet-SVN] r5095 - GNUnet/src/transports
Date: Sat, 16 Jun 2007 18:36:29 -0600 (MDT)

Author: grothoff
Date: 2007-06-16 18:36:29 -0600 (Sat, 16 Jun 2007)
New Revision: 5095

Modified:
   GNUnet/src/transports/http.c
Log:
fix

Modified: GNUnet/src/transports/http.c
===================================================================
--- GNUnet/src/transports/http.c        2007-06-17 00:29:29 UTC (rev 5094)
+++ GNUnet/src/transports/http.c        2007-06-17 00:36:29 UTC (rev 5095)
@@ -336,44 +336,55 @@
   HTTPSession * httpsession = tsession->internal;
   struct HTTPPutData * pos;
   struct HTTPPutData * next;
+  int i;
 
-  if (httpsession != NULL) {
-    MUTEX_LOCK(httpsession->lock);
-    httpsession->users--;
-    if (httpsession->users > 0) {
-      MUTEX_UNLOCK(httpsession->lock);
-      return OK;
+  if (httpsession == NULL) {
+    FREE(tsession);
+    return OK;
+  }
+  MUTEX_LOCK(httpsession->lock);
+  httpsession->users--;
+  if (httpsession->users > 0) {
+    MUTEX_UNLOCK(httpsession->lock);
+    return OK;
+  }
+  httpsession->destroyed = YES;
+  MUTEX_UNLOCK(httpsession->lock);
+  MUTEX_LOCK(httplock);
+  for (i=0;i<tsessionCount;i++) {
+    if (tsessions[i] == tsession) {
+      tsessions[i] = tsessions[--tsessionCount];
+      break;
     }
-    httpsession->destroyed = YES;
-    MUTEX_UNLOCK(httpsession->lock);
-    if (httpsession->is_client) {
+  }
+  MUTEX_UNLOCK(httplock);    
+  if (httpsession->is_client) {
+    curl_multi_remove_handle(curl_multi,
+                            httpsession->cs.client.get);
+    curl_easy_cleanup(httpsession->cs.client.get);
+    FREE(httpsession->cs.client.url);
+    pos = httpsession->cs.client.puts;
+    while (pos != NULL) {
+      next = pos->next;
       curl_multi_remove_handle(curl_multi,
-                              httpsession->cs.client.get);
-      curl_easy_cleanup(httpsession->cs.client.get);
-      FREE(httpsession->cs.client.url);
-      pos = httpsession->cs.client.puts;
-      while (pos != NULL) {
-       next = pos->next;
-       curl_multi_remove_handle(curl_multi,
-                                pos->curl_put);
-       curl_easy_cleanup(pos->curl_put);
-       FREE(pos->msg);
-       FREE(pos);
-       pos = next;
-      }
-
-    } else {
-      MHD_destroy_response(httpsession->cs.server.get);
+                              pos->curl_put);
+      curl_easy_cleanup(pos->curl_put);
+      FREE(pos->msg);
+      FREE(pos);
+      pos = next;
     }
-    GROW(httpsession->rbuff2,
-        httpsession->rsize2,
-        0);
-    GROW(httpsession->wbuff,
-        httpsession->wsize,
-        0);
-    MUTEX_DESTROY(httpsession->lock);
-    FREE(httpsession);
+    
+  } else {
+    MHD_destroy_response(httpsession->cs.server.get);
   }
+  GROW(httpsession->rbuff2,
+       httpsession->rsize2,
+       0);
+  GROW(httpsession->wbuff,
+       httpsession->wsize,
+       0);
+  MUTEX_DESTROY(httpsession->lock);
+  FREE(httpsession);
   FREE(tsession);
   return OK;
 }
@@ -1083,6 +1094,7 @@
   MUTEX_LOCK(httplock);
   for (i=0;i<tsessionCount;i++) {
     s = tsessions[i]->internal;
+    MUTEX_LOCK(s->lock);
     if (s->is_client) {
       prev = NULL;
       pos = s->cs.client.puts;
@@ -1120,6 +1132,7 @@
         B) destroy response object
       */
     }
+    MUTEX_UNLOCK(s->lock);
   }
   MUTEX_UNLOCK(httplock);  
 }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]