diff options
author | Steve Bennett <steveb@workware.net.au> | 2019-07-29 13:28:31 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2019-07-31 08:46:01 +1000 |
commit | c8abda4d473268842201f228b8980e523766e91b (patch) | |
tree | e8563fd0694c51885bf0e4f504049c55c50e0f41 /jim-aio.c | |
parent | a8b8c416c7f3c9e06fe3320b25e8dd37570e9f92 (diff) | |
download | jimtcl-c8abda4d473268842201f228b8980e523766e91b.zip jimtcl-c8abda4d473268842201f228b8980e523766e91b.tar.gz jimtcl-c8abda4d473268842201f228b8980e523766e91b.tar.bz2 |
aio: Add support for lock -wait
Sometimes it is useful to wait for a lock to become available.
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-aio.c')
-rw-r--r-- | jim-aio.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -1440,13 +1440,21 @@ static int aio_cmd_lock(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { AioFile *af = Jim_CmdPrivData(interp); struct flock fl; + int lockmode = F_SETLK; + + if (argc == 1) { + if (!Jim_CompareStringImmediate(interp, argv[0], "-wait")) { + return -1; + } + lockmode = F_SETLKW; + } fl.l_start = 0; fl.l_len = 0; fl.l_type = F_WRLCK; fl.l_whence = SEEK_SET; - switch (fcntl(af->fd, F_SETLK, &fl)) + switch (fcntl(af->fd, lockmode, &fl)) { case 0: Jim_SetResultInt(interp, 1); @@ -1732,12 +1740,12 @@ static const jim_subcmd_type aio_command_table[] = { }, #endif #if defined(HAVE_STRUCT_FLOCK) - { "lock", + { "lock ?-wait?", NULL, aio_cmd_lock, 0, - 0, - /* Description: Attempt to get a lock. */ + 1, + /* Description: Attempt to get a lock, possibly waiting */ }, { "unlock", NULL, |