Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

gyp: work around sunos python flock() bug

flock(LOCK_EX) always fails with EBADF, use fcntl(F_SETLK) instead.
  • Loading branch information...
bnoordhuis committed Oct 10, 2011
1 parent e6092f3 commit 6b9f5599849045a1f07cc9b9aca23d7a02aa5260
Showing with 12 additions and 6 deletions.
  1. +12 −6 tools/gyp/pylib/gyp/sun_tool.py
@@ -5,11 +5,9 @@

"""These functions are executed via gyp-sun-tool when using the Makefile generator."""

import os
import fcntl
import plistlib
import shutil
import string
import os
import struct
import subprocess
import sys

@@ -36,6 +34,14 @@ def _CommandifyName(self, name_string):
def ExecFlock(self, lockfile, *cmd_list):
"""Emulates the most basic behavior of Linux's flock(1)."""
# Rely on exception handling to report errors.
fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666)
fcntl.flock(fd, fcntl.LOCK_EX)
# Note that the stock python on SunOS has a bug
# where fcntl.flock(fd, LOCK_EX) always fails
# with EBADF, that's why we use this F_SETLK
# hack instead.
fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0o666)
op = struct.pack('hhllhhl', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
fcntl.fcntl(fd, fcntl.F_SETLK, op)
return subprocess.call(cmd_list)

if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))

0 comments on commit 6b9f559

Please sign in to comment.
You can’t perform that action at this time.