- snprintf(fn, sizeof(fn), "/proc/%lu/exe", (unsigned long) getpid());
-
- if ((k = readlink(fn, t, l-1)) < 0)
- snprintf(t, l, "(unknown)");
- else {
- char *slash;
-
- assert((size_t) k <= l-1);
- t[k] = 0;
-
- if ((slash = strrchr(t, '/')))
- memmove(t, slash+1, strlen(slash)+1);
+ pthread_mutex_lock(&mutex);
+
+ if (exe_name[0] == 0) {
+ int k;
+
+ if ((k = readlink("/proc/self/exe", exe_name, sizeof(exe_name)-1)) < 0)
+ snprintf(exe_name, sizeof(exe_name), "(unknown)");
+ else {
+ char *slash;
+
+ assert((size_t) k <= sizeof(exe_name)-1);
+ exe_name[k] = 0;
+
+ if ((slash = strrchr(exe_name, '/')))
+ memmove(exe_name, slash+1, strlen(slash)+1);
+ }