Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Thu, 16 Jul 2020 22:51:02 -0700
From: Hydro Flask <>
Subject: Idea: futex() system call entry point


I have a project that implements an API that must be AS-safe. This is a 
blocking API, so currently the only option I have to implement the 
blocking behavior is select()/read() and similar FD-based calls.

Using FDs to implement synchronization is okay but if there are very 
many threads then FD space would get exhausted (usually max 1024 FDs). 
It would be nice to use pthread_cond_wait() but that is not AS-safe 
according to POSIX.

Had the idea of using futex() but my other constraint is that the 
blocking call must also be a cancellation point. Currently calling the 
futex system call through syscall() won't work and there is no way to 
implement cancellation on top of syscall() in a portable way since 
cancellation is implementation defined.

So what if Linux libcs (and potentially others) started exposing futex() 
directly as a function call? It would need these properties to be 

* AS-safe
* cancellation point

I saw that Rich Felker already proposed this many years ago but it seems 
it never came to fruition:

What do you think about my idea?


Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.