Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F150431197
D51027.id157640.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D51027.id157640.diff
View Options
diff --git a/usr.bin/lockf/lockf.c b/usr.bin/lockf/lockf.c
--- a/usr.bin/lockf/lockf.c
+++ b/usr.bin/lockf/lockf.c
@@ -62,35 +62,35 @@
"PIDs cannot be managed safely from a signal handler on this platform.");
static sig_atomic_t child = -1;
static int lockfd = -1;
-static int keep;
-static int fdlock;
+static bool keep;
+static bool fdlock;
static int status;
static bool termchild;
-static volatile sig_atomic_t timed_out;
+static sig_atomic_t timed_out;
/*
* Check if fdlock is implied by the given `lockname`. We'll write the fd that
* is represented by it out to ofd, and the caller is expected to do any
* necessary validation on it.
*/
-static int
+static bool
fdlock_implied(const char *name, long *ofd)
{
char *endp;
long fd;
if (strncmp(name, FDLOCK_PREFIX, sizeof(FDLOCK_PREFIX) - 1) != 0)
- return (0);
+ return (false);
/* Skip past the prefix. */
name += sizeof(FDLOCK_PREFIX) - 1;
errno = 0;
fd = strtol(name, &endp, 10);
if (errno != 0 || *endp != '\0')
- return (0);
+ return (false);
*ofd = fd;
- return (1);
+ return (true);
}
/*
@@ -103,40 +103,38 @@
.sa_handler = sigchld,
.sa_flags = SA_NOCLDSTOP,
};
- int ch, flags, silent, writepid;
+ const char *errstr;
long long waitsec;
+ int ch, flags;
union lock_subject subj;
sigset_t mask;
+ bool silent, writepid;
- silent = keep = writepid = 0;
+ silent = writepid = false;
flags = O_CREAT | O_RDONLY;
waitsec = -1; /* Infinite. */
while ((ch = getopt(argc, argv, "knpsTt:w")) != -1) {
switch (ch) {
case 'k':
- keep = 1;
+ keep = true;
break;
case 'n':
flags &= ~O_CREAT;
break;
case 's':
- silent = 1;
+ silent = true;
break;
case 'T':
termchild = true;
break;
case 't':
- {
- const char *errstr;
-
waitsec = strtonum(optarg, 0, UINT_MAX, &errstr);
if (errstr != NULL)
errx(EX_USAGE,
"invalid timeout \"%s\"", optarg);
- }
break;
case 'p':
- writepid = 1;
+ writepid = true;
flags |= O_TRUNC;
/* FALLTHROUGH */
case 'w':
@@ -162,7 +160,7 @@
* If there aren't any arguments left, then we must be in fdlock mode.
*/
if (argc == 0 && *lockname != '/') {
- fdlock = 1;
+ fdlock = true;
subj.subj_fd = -1;
} else {
fdlock = fdlock_implied(lockname, &subj.subj_fd);
@@ -227,13 +225,16 @@
*/
lockfd = acquire_lock(&subj, flags | O_NONBLOCK, silent);
while (lockfd == -1 && !timed_out && waitsec != 0) {
- if (keep || fdlock)
+ if (keep || fdlock) {
lockfd = acquire_lock(&subj, flags, silent);
- else {
+ } else {
wait_for_lock(lockname);
lockfd = acquire_lock(&subj, flags | O_NONBLOCK,
silent);
}
+
+ /* timed_out */
+ atomic_signal_fence(memory_order_acquire);
}
if (waitsec > 0)
alarm(0);
@@ -353,7 +354,7 @@
kill(child, sig);
cleanup();
signal(sig, SIG_DFL);
- if (kill(getpid(), sig) == -1)
+ if (raise(sig) == -1)
_Exit(EX_OSERR);
}
@@ -385,6 +386,7 @@
{
timed_out = 1;
+ atomic_signal_fence(memory_order_release);
}
static void
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 2, 4:43 AM (15 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30704128
Default Alt Text
D51027.id157640.diff (2 KB)
Attached To
Mode
D51027: lockf: minor cosmetic cleanups, no functional change
Attached
Detach File
Event Timeline
Log In to Comment