Question

flock() is generally async-signal-safe because it is a system call. Its semantics make it hard to implement it differently. It is not in the POSIX's list of async-signal-safe functions because it is not in POSIX at all.

Is it possible to use flock() in the sigaction handler without problems?

Was it helpful?

Solution

According to @alk answer in the following topic:

We can develop our property flock() function (its name could be async_flock()). we copy in this new function the content of the origin lockf() code and then we make the following changes in order to get an async-signal-safe function:

  • replace __fcntl with fcntl: necessary to make the code compile
  • replace __set_errno(<errno-define>) with errno = <errno-define>: necessary to make the code compile

  • replace the call to memset() with appropriate assigments struct fcntl = {0}: necessary to have it become async-signal-save.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top