Home / os / blackberry
GNU Guile < = 2.0.12 Thread-unsafe umask modification
Posted on 30 November -0001
<HTML><HEAD><TITLE>GNU Guile <= 2.0.12 Thread-unsafe umask modification</TITLE><META http-equiv="Content-Type" content="text/html; charset=utf-8"></HEAD><BODY>Hello! When the optional ‘mode' argument to the ‘mkdir' procedure is omitted, umask(2) is used to find out what the current mask is and to compute the mode argument to mkdir(2): --8<---------------cut here---------------start------------->8--- if (SCM_UNBNDP (mode)) { mask = umask (0); umask (mask); STRING_SYSCALL (path, c_path, rv = mkdir (c_path, 0777 ^ mask)); } --8<---------------cut here---------------end--------------->8--- The problem is that this changes the process' umask globally for a short duration, during which other threads will get 0 as the mask… Furthermore, AFAICS, the above logic is redundant with what the kernel does anyway. That is, in a single-threaded program, mask = umask (0); umask (mask); mkdir (file, 0777 ^ mask); is equivalent to: mkdir (file, 0777); Am I right that we should just remove these two ‘umask' calls? Ludo'. PS: This code has been there since 1996 or earlier. </BODY></HTML>