[lttng-dev] Race condition between lttng destroy and lttng load commands
liguang li
liguang.lee6 at gmail.com
Tue Jun 5 22:52:03 EDT 2018
Hi,
I found there is a race condition between lttng destroy and lttng load commands
in deleting and creating the shared memory path.
lttng -V
lttng (LTTng Trace Control) 2.8.6 - Isseki Nicho - v2.8.6
The test commands are as following:
1) lttng create rcs --shm-path=/var/log/lttng/shm
2) lttng enable-event -s rcs -c ch1 -a -u
3) lttng start rcs
4) lttng save rcs
./Application
5) lttng stop rcs
6) lttng destroy rcs
7) lttng load
Added some debug logs in the following function,
570 int mkdir_check_exists(const char *path, mode_t mode)
571 {
572 int ret = 0;
573 struct stat st;
574
575 fprintf(stderr, "Path %s\n", path);
576 ret = stat(path, &st);
577 if (ret == 0) {
578 fprintf(stderr, "path stat %s\n", path);
579 fprintf(stderr, "Link count: %ld\n", (long) st.st_nlink);
580 if (S_ISDIR(st.st_mode)) {
581 /* Directory exists, skip. */
582 goto end;
583 } else {
584 /* Exists, but is not a directory. */
585 errno = ENOTDIR;
586 ret = -1;
587 goto end;
588 }
589 }
590
591 /*
592 * Let mkdir handle other errors as the caller expects mkdir
593 * semantics.
594 */
595 ret = mkdir(path, mode);
596 if (ret)
597 PERROR("Mkdir path %s", path);
598 end:
599 return ret;
600 }
The LTTng log is as following:
...
DEBUG3 - 05:49:55.357467 [30485/30489]: mkdir() recursive
/var/log/lttng/shm//rcs-20180529-034348/ust/uid/0/32-bit with mode 504
for uid 0 and gid 0 (in run_as_mkdir_recursive() at runas.c:472)
DEBUG1 - 05:49:55.357490 [30485/30489]: Using run_as worker (in
run_as() at runas.c:451)
Path /var
path stat /var
Link count: 11
Path /var/log
path stat /var/log
Link count: 3
Path /var/log/lttng
path stat /var/log/lttng
Link count: 3
Path /var/log/lttng/shm
path stat /var/log/lttng/shm
Link count: 3
Path /var/log/lttng/shm/
path stat /var/log/lttng/shm/
Link count: 3
Path /var/log/lttng/shm//rcs-20180529-034348
path stat /var/log/lttng/shm//rcs-20180529-034348
Link count: 3
Path /var/log/lttng/shm//rcs-20180529-034348/ust
path stat /var/log/lttng/shm//rcs-20180529-034348/ust
Link count: 3
Path /var/log/lttng/shm//rcs-20180529-034348/ust/uid
path stat /var/log/lttng/shm//rcs-20180529-034348/ust/uid
Link count: 3
Path /var/log/lttng/shm//rcs-20180529-034348/ust/uid/0
path stat /var/log/lttng/shm//rcs-20180529-034348/ust/uid/0
Link count: 3
Path /var/log/lttng/shm//rcs-20180529-034348/ust/uid/0/32-bit
PERROR - 05:49:55.363127 [30486/30486]: Mkdir path
/var/log/lttng/shm//rcs-20180529-034348/ust/uid/0/32-bit: No such file
or directory (in mkdir_check_exists() at utils.c:607)
PERROR - 05:49:55.363156 [30486/30486]: mkdir recursive last element:
No such file or directory (in _utils_mkdir_recursive_unsafe() at
utils.c:692)
PERROR - 05:49:55.363221 [30485/30489]: run_as_mkdir_recursive: No
such file or directory (in ust_registry_session_init() at
ust-registry.c:893)
DEBUG3 - 05:49:55.363261 [30485/30489]: rmdir_recursive()
/var/log/lttng/shm//rcs-20180529-034348 with for uid 0 and gid 0 (in
run_as_rmdir_recursive() at runas.c:528)
DEBUG1 - 05:49:55.363285 [30485/30489]: Using run_as worker (in
run_as() at runas.c:451)
DEBUG3 - 05:49:55.364605 [30486/30486]: Attempting rmdir
/var/log/lttng/shm//rcs-20180529-034348 (in utils_recursive_rmdir() at
utils.c:1343)
DEBUG3 - 05:49:55.365543 [30485/30489]: Buffer registry per UID
destroy with id: 2, ABI: 32, uid: 0 (in buffer_reg_uid_destroy() at
buffer-registry.c:678)
DEBUG3 - 05:49:55.365590 [30485/30489]: Buffer registry per UID find
id: 2, ABI: 32, uid: 0 (in buffer_reg_uid_find() at
buffer-registry.c:203)
DEBUG3 - 05:49:55.365639 [30485/30487]: [ht-thread] Returning from
poll on 2 fds. (in thread_ht_cleanup() at ht-cleanup.c:73)
DEBUG1 - 05:49:55.365647 [30485/30489]: Sending response (size: 20,
retcode: UST create channel failed (58)) (in thread_manage_clients()
at main.c:4588)
Regards,
Liguang
More information about the lttng-dev
mailing list