In case the underlying locking mechanism needs a filename, it will generate one.
Moreover, if we only support Unix & Windows, the preferred mechanism won't use a file at all.
Is that correct?
In all cases, we don't have to generate a mktemp name ourselves, it'll be done in APR. Right?
On 01/10/2024 14:02, Ruediger Pluem
wrote:
On 10/1/24 9:32 AM, Ervin Hegedüs wrote:Hi there,I hope this is a good forum to ask my question. We (mod_security2 developers) use mutex locks. Thiscode snippet was added recently: https://github.com/owasp-modsecurity/ModSecurity/blob/v2/master/apache2/modsecurity.c#L125-L168 As you can see, we create locks with these functions: apr_temp_dir_get() apr_file_mktemp() apr_global_mutex_create() This wrapper (acquire_global_lock()) works on Linux, but it seems to crash on FreeBSD: https://github.com/owasp-modsecurity/ModSecurity/issues/3255 I did some investigation and I found that after the apr_file_mktemp() returns with success and the created file name is given to apr_global_mutex_create() then it removes that. In this comment: https://github.com/owasp-modsecurity/ModSecurity/issues/3255#issuecomment-2383132160 I explained the results (with gdb and truss). My question is: what is the expected way to use file mutexes? Thanks for your help,Have a look at https://httpd.apache.org/docs/2.4/mod/core.html#mutex https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L156 https://github.com/apache/httpd/blob/trunk/include/util_mutex.h#L181 and as example https://github.com/apache/httpd/blob/trunk/modules/ssl/mod_ssl.c#L456 https://github.com/apache/httpd/blob/trunk/modules/ssl/ssl_engine_mutex.c#L50 If you want to go for an APR only approach keep in mind that the apr methods create the lock file if needed either with the name you specified or they create it in /tmp via apr_file_mktemp It should not exist. See https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1051 https://github.com/apache/apr/blob/1.7.x/locks/unix/proc_mutex.c#L1200 Regards Rüdiger