nmh-workers
[Top] [All Lists]

Re: [Nmh-workers] Locking (specifically, sequences)

2013-03-11 14:35:04


Ken Hornstein wrote:
i propose that
the locking fopen function in the MH library be adapted to be willing to
try the advisory lock three times at one second intervals, on the
assumption that no writer will hold the lock that long and if there's a
convoy then we've got bigger problems. (ideally we'd do a wait-lock in a
thread and kill that thread if it waits too long, but threads would not
be "the MH way".)

I guess I was thinking in my head of the lock completely blocking, but
you think that having a timeout makes more sense?  I'm neutral on that.
There's not a portable way of having a lock timeout other than loop/sleep,
is there?

well, yes, we've done it with fork.

if ((child = fork()) == 0) {
    sleep(3);
    kill(SIGINT, getppid());
    _exit(0);
}
if (child > 0) {
    flock(LOCK_EX);
    kill(SIGINBT, child);
}

so, one of them always has to kill the other, it's just a matter of
whether the lock succeeds in time or not. obviously there's error
checking missing here, and signal catching. but mostly this is a
gigantic performance drainer and should not be done. that's why i
proposed a loop and LOCK_NB.

if "the MH way" could expand to C89 and posix threads, we'd have some
options that were both performance and correct.

paul

_______________________________________________
Nmh-workers mailing list
Nmh-workers@nongnu.org
https://lists.nongnu.org/mailman/listinfo/nmh-workers
<Prev in Thread] Current Thread [Next in Thread>