gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r26114 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r26114 - gnunet/src/util
Date: Thu, 14 Feb 2013 17:15:11 +0100

Author: LRN
Date: 2013-02-14 17:15:11 +0100 (Thu, 14 Feb 2013)
New Revision: 26114

Modified:
   gnunet/src/util/disk.c
Log:
Fix file close to work on pipe ends correctly

Modified: gnunet/src/util/disk.c
===================================================================
--- gnunet/src/util/disk.c      2013-02-14 16:15:07 UTC (rev 26113)
+++ gnunet/src/util/disk.c      2013-02-14 16:15:11 UTC (rev 26114)
@@ -1819,32 +1819,51 @@
 int
 GNUNET_DISK_file_close (struct GNUNET_DISK_FileHandle *h)
 {
+  int ret;
   if (h == NULL)
   {
     errno = EINVAL;
     return GNUNET_SYSERR;
   }
 
+  ret = GNUNET_OK;
+
 #if MINGW
   if (!CloseHandle (h->h))
   {
     SetErrnoFromWinError (GetLastError ());
     LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close");
+    ret = GNUNET_SYSERR;
+  }
+  if (h->oOverlapRead)
+  {
+    if (!CloseHandle (h->oOverlapRead->hEvent))
+    {
+      SetErrnoFromWinError (GetLastError ());
+      LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close");
+      ret = GNUNET_SYSERR;
+    }
     GNUNET_free (h->oOverlapRead);
+  }
+  if (h->oOverlapWrite)
+  {
+    if (!CloseHandle (h->oOverlapWrite->hEvent))
+    {
+      SetErrnoFromWinError (GetLastError ());
+      LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close");
+      ret = GNUNET_SYSERR;
+    }
     GNUNET_free (h->oOverlapWrite);
-    GNUNET_free (h);
-    return GNUNET_SYSERR;
   }
 #else
   if (close (h->fd) != 0)
   {
     LOG_STRERROR (GNUNET_ERROR_TYPE_WARNING, "close");
-    GNUNET_free (h);
-    return GNUNET_SYSERR;
+    ret = GNUNET_SYSERR;
   }
 #endif
   GNUNET_free (h);
-  return GNUNET_OK;
+  return ret;
 }
 
 




reply via email to

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