Bug #1171
closed
lttng_ust_delete_fd_from_tracker: Assertion failure
Added by Stefan Palade about 6 years ago.
Updated almost 6 years ago.
Assignee:
Jonathan Rajotte Julien
Description
$> ./lttng_ust_elf_test
..lttng_ust_delete_fd_from_tracker: Assertion `IS_FD_SET(fd, lttng_fd_set)' failed.
Aborted
It seems to be introduced in 2.9.3 and 2.10.1 ( http://git.lttng.org/?p=lttng-ust.git;a=commit;h=0dd6b494078f56264600e17d93e6c980f8bc36ba )
ANALYSIS:
It seems the file descriptor is initialized to 0 in lttng_ust_elf_create() and later on it is trying to clean up in error path when the file ("/home/..... (deleted)") can not be opened. Not really sure how it can be triggered from application, but the executable have of some reason been deleted at the time it tries to read ELF info.
Please see the attached test program for triggering.
We have a fix proposal but I'm inclined to see your opinion on root cause maybe these a deeper reason why this happens.
Files
- Status changed from New to Confirmed
- Assignee set to Jonathan Rajotte Julien
Hi Stefan,
I'm looking into it. I was able to reproduce the problem.
In the mean time could you share with us your potential fix?
Thanks
- Status changed from Confirmed to Feedback
Jonathan Rajotte Julien wrote:
Hi Stefan,
I'm looking into it. I was able to reproduce the problem.
In the mean time could you share with us your potential fix?
Thanks
The fix on our side was the same as your proposal.
--- a/liblttng-ust/lttng-ust-elf.c
++ b/liblttng-ust/lttng-ust-elf.c
@ -249,7 +249,7
@ struct lttng_ust_elf *lttng_ust_elf_create(const char *path)
if (!elf) {
goto error;
}
elf>fd = -1;
elf->path = strdup(path);
if (!elf->path) {
Stefan Palade wrote:
Jonathan Rajotte Julien wrote:
Hi Stefan,
I'm looking into it. I was able to reproduce the problem.
In the mean time could you share with us your potential fix?
Thanks
The fix on our side was the same as your proposal.
--- a/liblttng-ust/lttng-ust-elf.c
+++ b/liblttng-ust/lttng-ust-elf.c
@@ -249,7 +249,7 @@ struct lttng_ust_elf *lttng_ust_elf_create(const char *path)
if (!elf) {
goto error;
}
-
+ elf->fd = -1;
elf->path = strdup(path);
if (!elf->path) {
- Status changed from Feedback to Resolved
- % Done changed from 0 to 100
Also available in: Atom
PDF