On 25/07/17 12:48, Alan DeKok wrote:
Because the traditional POSIX APIs are utter shit.
Indeed.
If a process opens a file multiple times, and does fcntl() lock on one file descriptor, closing any OTHER file descriptor on that file causes the lock to go away.
Sure, that's well documented (as opposed to well understood ;o), and the mutex use is fine (necessary, as you've noted). What I don't understand is why the code open()s to one FD but returns a dup()d FD to the caller. This seems to accomplish nothing - you're still paying for a context switch on the dup() and it's frankly hard for me to believe that saving the open() is worth the extra code complexity, but I'm assuming there's a reason. Unless I'm missing something, the mutex around the exfile isn't dependent on the dup()ing of the FD?