[MacPorts] #16145: Erlang R12B-3 needs a patch for fsync problem

MacPorts noreply at macports.org
Thu Jul 31 00:36:40 PDT 2008


#16145: Erlang R12B-3 needs a patch for fsync problem
------------------------------------+---------------------------------------
 Reporter:  jerry.jalava at gmail.com  |       Owner:  macports-tickets at lists.macosforge.org
     Type:  defect                  |      Status:  new                                  
 Priority:  Normal                  |   Milestone:                                       
Component:  ports                   |     Version:  1.6.0                                
 Keywords:                          |  
------------------------------------+---------------------------------------
 The following has been taken from the erlang-patches mailing list.
 (http://www.erlang.org/pipermail/erlang-patches/2008-July/000258.html)
 --------

 Dear OTP Team,

 traditionally, on UNIX systems the fsync() system call is used
 to flush any filesystem buffers to disk. The file::sync() function
 triggers a fsync() call in OTP R12B-3

 On Darwin (and Mac OS X) systems, the fsync() system call
 exists, but does not guarantee the writing to disk. The
 fcntl(F_FULLFSYNC) function call exists to achieve this.
 See
 http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/fsync.2.html
 and
 http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/fcntl.2.html
 for reference.

 The patch below adds some #ifdefs to figure out if it is
 compiled on a Darwin system and uses the fcntl() function
 instead of the fsync() function.

 Please note my poor understanding of how your build system
 actually detects the target host. My way of detecting Darwin
 was shamelessly ripped from elsewhere in the source tree
 and might be wrong in this case (although testing was successful).
 Please feel free to make any necessary changes in case you
 choose to integrate the patch.

 I'm working on the CouchDB project (yes, a database in Erlang),
 and we require a reliable file::sync()-behaviour for data consistency.

 Adding this to OTP would be highly appreciated.

 Cheers
 Jan & the CouchDB Team
 --

 --- erts/emulator/drivers/unix/unix_efile.c.orig        2008-07-17
 20:44:23.000000000 +0200
 +++ erts/emulator/drivers/unix/unix_efile.c     2008-07-17
 20:44:21.000000000 +0200
 @@ -44,6 +44,14 @@
   #endif
   #endif /* _OSE_ */

 +#if defined(__APPLE__) && defined(__MACH__) && !defined(__DARWIN__)
 +#define DARWIN 1
 +#endif
 +
 +#ifdef DARWIN
 +#include <fcntl.h>
 +#endif /* DARWIN */
 +
   #ifdef VXWORKS
   #include <ioLib.h>
   #include <dosFsLib.h>
 @@ -818,7 +826,11 @@
     undefined fsync
   #endif /* VXWORKS */
   #else
 +#if defined(DARWIN) && defined(F_FULLFSYNC)
 +    return check_error(fcntl(fd, F_FULLFSYNC), errInfo);
 +#else
       return check_error(fsync(fd), errInfo);
 +#endif /* DARWIN */
   #endif /* NO_FSYNC */
   }

 ------

 Until this hopefulle gets added to the OTP at some point it would be great
 to include it in Port.

 Regards,
 Jerry

-- 
Ticket URL: <http://trac.macports.org/ticket/16145>
MacPorts <http://www.macports.org/>
Ports system for Mac OS


More information about the macports-tickets mailing list