Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [PATCH] Allow zsystem flock to query without second-lasting timeout
- X-seq: zsh-workers 39268
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: Re: [PATCH] Allow zsystem flock to query without second-lasting timeout
- Date: Sat, 10 Sep 2016 10:01:22 -0700
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version; bh=nuxzY+GsJ5MW9nk+qs7m9IbeW2S9daSMNzQsSj5Agaw=; b=P9jB+L0Qvzti0kra1CqXgNSO1Yq3O/h1c3UZRwTp5Ow8nNOrLTj0YmBDquAbMbwtvA zyx/pDSgUG8TwTUKU6CGMU//ADxD4Rq1z71NeyqoNsitlmZlTFOJ655exYu+UuPRs8OC yd09LRinayC7QwAxx/wKy+iTFBHsMohVmF1BBOrCF4e4mVSUQXohNWVjM8in2mKOvyMx l9ctqSz4W9gIVzGdwA8+NE/3PdxXKhG+tQjDTrBJI3F5vu4d3dDHQ23f5sV8pdDGK2UQ QuSPx1WjbYRZ3QTQZ/Bzupkg9M5Dxx0XBZ1zL6IqRgo0oNw/hpT1CSlha/3F7CbQtX4R iZLw==
- In-reply-to: <CAKc7PVDYBYx99+nUSS1nMuimRUtqhi8GGhUDawUn6BOg2M4c_g@mail.gmail.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <CAKc7PVDYBYx99+nUSS1nMuimRUtqhi8GGhUDawUn6BOg2M4c_g@mail.gmail.com>
On Sep 10, 5:49pm, Sebastian Gniazdowski wrote:
}
} attached patch is dumb, and allows to use negative timeout, which
} results in a quick (non-waiting) single fcntl() call.
I think a better approach would be to allow a zero timeout. (Why was
there already a cast of time_t to time_t in the time(NULL) expression?)
Hopefully no one is already using the undocumented behavior that
"zsystem flock -t 0 ..." nevertheless waited forever.
diff --git a/Src/Modules/system.c b/Src/Modules/system.c
index 1ee61c0..afaec26 100644
--- a/Src/Modules/system.c
+++ b/Src/Modules/system.c
@@ -521,7 +521,7 @@ static int
bin_zsystem_flock(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
{
int cloexec = 1, unlock = 0, readlock = 0;
- time_t timeout = 0;
+ zlong timeout = -1;
char *fdvar = NULL;
#ifdef HAVE_FCNTL_H
struct flock lck;
@@ -573,7 +573,7 @@ bin_zsystem_flock(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
} else {
optarg = *args++;
}
- timeout = (time_t)mathevali(optarg);
+ timeout = mathevali(optarg);
break;
case 'u':
@@ -650,7 +650,7 @@ bin_zsystem_flock(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
sleep(1);
}
} else {
- while (fcntl(flock_fd, F_SETLKW, &lck) < 0) {
+ while (fcntl(flock_fd, timeout == 0 ? F_SETLK : F_SETLKW, &lck) < 0) {
if (errflag)
return 1;
if (errno == EINTR)
Messages sorted by:
Reverse Date,
Date,
Thread,
Author