3 ms·
> It seems like the only reliable way to fix this is to change these functions so that they exclusively acquire a mutex. A mutex can ensure thread safety but r
by belter 2y ago
> It seems like the only reliable way to fix this is to change these functions so that they exclusively acquire a mutex.
A mutex can ensure thread safety but risks deadlocks if not used carefully and will hurt performance...
- hamandcheese 2y agoAgree about performance, but wouldn't there need to be >1 mutex to risk a deadlock?
- pixelesque 2y agoIf it's not a "recursive mutex" (where you can call lock within the same thread on the same mutex more than once consecutively and it handled that), it's possible to lock on itself again (say in code which is recursive)...
- loeg 2y agoImagine you get a signal during getenv itself with the mutex held. Then your signal handler calls getenv. (On the other hand -- getenv is not marked async-signal-safe, so this use is already illegal.)
- fch42 2y agoThe problem (with get/set/putenv as they are) was isn't the non-use of a mutex. It's the "meaning" of the pointer returned to by getenv(). It returns a char*. Nevermind the persistance of that value - you can work around that by deliberately leaking memory - but it's writeable. Whether it's a good idea to do so ... well. But simply locking "inside" these funcs doesn't solve all the / your issues.