diff --git a/config-unix.mk b/config-unix.mk index 85605b85..57761091 100644 --- a/config-unix.mk +++ b/config-unix.mk @@ -32,7 +32,7 @@ CPPFLAGS += -D_FILE_OFFSET_BITS=64 ifeq (SunOS,$(uname_S)) EV_CONFIG=config_sunos.h EIO_CONFIG=config_sunos.h -CPPFLAGS += -Isrc/ares/config_sunos +CPPFLAGS += -Isrc/ares/config_sunos -D__EXTENSIONS__ LINKFLAGS+=-lsocket -lnsl UV_OS_FILE=uv-sunos.c endif diff --git a/src/uv-unix.c b/src/uv-unix.c index 82bc3f49..82caa7c6 100644 --- a/src/uv-unix.c +++ b/src/uv-unix.c @@ -65,6 +65,7 @@ extern char **environ; # endif +#define LOCKFILE_SUFFIX ".lock" static uv_err_t last_err; @@ -2236,6 +2237,7 @@ size_t uv__strlcpy(char* dst, const char* src, size_t size) { uv_stream_t* uv_std_handle(uv_std_type type) { assert(0 && "implement me"); + return NULL; } @@ -2412,7 +2414,6 @@ int uv_process_kill(uv_process_t* process, int signum) { } -#define LOCKFILE_SUFFIX ".lock" int uv_flock_init(uv_flock_t* lock, const char* filename) { int saved_errno; int status; @@ -2437,10 +2438,10 @@ out: errno = saved_errno; return status; } -#undef LOCKFILE_SUFFIX int uv_flock_acquire(uv_flock_t* lock, int* locked_p) { + struct flock fl; char buf[32]; int saved_errno; int status; @@ -2461,8 +2462,15 @@ int uv_flock_acquire(uv_flock_t* lock, int* locked_p) { goto out; } + + fl.l_type = F_WRLCK; + fl.l_whence = SEEK_SET; + fl.l_start = 0; + fl.l_len = 0; + fl.l_pid = getpid(); + do { - status = flock(lockfd, LOCK_EX | LOCK_NB); + status = fcntl(lockfd, F_SETLKW, &fl); } while (status == -1 && errno == EINTR);