Mercurial > hg > audiodb
view lock.cpp @ 620:70fc1a504138
Okay, I think my python bindings have reached the border of useful, so in the svn they go.
The bindings currently allow for adb create and open, status and the setting of the l2norm and power flags.
Note that these are the direct c bindings, when it's done there will be OO dressing on top for standard entry.
Also, even though I don't use numpy yet, the include file is brought in, so the module won't build if you don't have numpy in an importable place.
author | map01bf |
---|---|
date | Tue, 15 Sep 2009 17:40:02 +0000 |
parents | 4eedc18634f5 |
children |
line wrap: on
line source
extern "C" { #include "audioDB_API.h" } #include "audioDB-internals.h" int acquire_lock(int fd, bool exclusive) { #if !defined(WIN32) struct flock lock; int status; lock.l_type = exclusive ? F_WRLCK : F_RDLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = ADB_HEADER_SIZE; retry: do { status = fcntl(fd, F_SETLKW, &lock); } while (status != 0 && errno == EINTR); if (status) { if (errno == EAGAIN) { sleep(1); goto retry; } else { return status; } } return 0; #else /* _locking() only supports exclusive locks */ int status; retry: status = _locking(fd, _LK_NBLCK, ADB_HEADER_SIZE); if(status) { Sleep(1000); goto retry; } return 0; #endif } int divest_lock(int fd) { #if !defined(WIN32) struct flock lock; lock.l_type = F_UNLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = ADB_HEADER_SIZE; return fcntl(fd, F_SETLKW, &lock); #else return _locking(fd, _LK_UNLCK, ADB_HEADER_SIZE); #endif }