Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

write architecture document #3

Open
rjarry opened this issue Mar 21, 2024 · 0 comments
Open

write architecture document #3

rjarry opened this issue Mar 21, 2024 · 0 comments
Assignees
Labels
docs Improvements or additions to documentation

Comments

@rjarry
Copy link
Collaborator

rjarry commented Mar 21, 2024

No description provided.

@rjarry rjarry added the docs Improvements or additions to documentation label Mar 21, 2024
@rjarry rjarry self-assigned this Mar 21, 2024
rjarry added a commit to rjarry/grout that referenced this issue Dec 6, 2024
The docstring of event_base_foreach_event() states explicitly that
modifying events in the callback function is unsafe and will cause
crashes.

event_free_finalize tries to acquire a lock that is already held when
the callback is called. Leading to a deadlock:

 (gdb) bt
 ...
 DPDK#3  ___pthread_mutex_lock (mutex=0x504000001550) at pthread_mutex_lock.c:93
 DPDK#4  0x00007f3f211b8485 in event_finalize_impl_ (flags=65536, ev=0x50c000005200, cb=0x4031ba <finalize_fd>)
 DPDK#5  0x00000000004042ed in close_connections (ev=0x50c000005200) at main/api.c:174
 ...
 DPDK#10 0x00007f3f211b263a in event_base_foreach_event (base=0x517000006d00, fn=0x40429f <close_connections>, arg=0x0)
 DPDK#11 0x0000000000404a3a in api_socket_stop () at main/api.c:253
 DPDK#12 0x00000000004072aa in main (argc=4, argv=0x7ffcc575d898) at main/main.c:210

Only use event_base_foreach_event() for iterating over the events that
we actually want to free (namely, ones that have read_cb and write_cb as
callbacks).

Only *after* returning from event_base_foreach_event(), call
event_free_finalize on all these events.

Fixes: 8653320 ("main: close active connections on shutdown")
Signed-off-by: Robin Jarry <[email protected]>
rjarry added a commit to rjarry/grout that referenced this issue Dec 6, 2024
The docstring of event_base_foreach_event() states explicitly that
modifying events in the callback function is unsafe and will cause
crashes.

event_free_finalize tries to acquire a lock that is already held when
the callback is called. Leading to a deadlock:

 (gdb) bt
 ...
 DPDK#3  ___pthread_mutex_lock (mutex=0x504000001550) at pthread_mutex_lock.c:93
 DPDK#4  0x00007f3f211b8485 in event_finalize_impl_ (flags=65536, ev=0x50c000005200, cb=0x4031ba <finalize_fd>)
 DPDK#5  0x00000000004042ed in close_connections (ev=0x50c000005200) at main/api.c:174
 ...
 DPDK#10 0x00007f3f211b263a in event_base_foreach_event (base=0x517000006d00, fn=0x40429f <close_connections>, arg=0x0)
 DPDK#11 0x0000000000404a3a in api_socket_stop () at main/api.c:253
 DPDK#12 0x00000000004072aa in main (argc=4, argv=0x7ffcc575d898) at main/main.c:210

Only use event_base_foreach_event() for iterating over the events that
we actually want to free (namely, ones that have read_cb and write_cb as
callbacks).

Only *after* returning from event_base_foreach_event(), call
event_free_finalize on all these events.

Fixes: 8653320 ("main: close active connections on shutdown")
Signed-off-by: Robin Jarry <[email protected]>
rjarry added a commit that referenced this issue Dec 6, 2024
The docstring of event_base_foreach_event() states explicitly that
modifying events in the callback function is unsafe and will cause
crashes.

event_free_finalize tries to acquire a lock that is already held when
the callback is called. Leading to a deadlock:

 (gdb) bt
 ...
 #3  ___pthread_mutex_lock (mutex=0x504000001550) at pthread_mutex_lock.c:93
 #4  0x00007f3f211b8485 in event_finalize_impl_ (flags=65536, ev=0x50c000005200, cb=0x4031ba <finalize_fd>)
 #5  0x00000000004042ed in close_connections (ev=0x50c000005200) at main/api.c:174
 ...
 #10 0x00007f3f211b263a in event_base_foreach_event (base=0x517000006d00, fn=0x40429f <close_connections>, arg=0x0)
 #11 0x0000000000404a3a in api_socket_stop () at main/api.c:253
 #12 0x00000000004072aa in main (argc=4, argv=0x7ffcc575d898) at main/main.c:210

Only use event_base_foreach_event() for iterating over the events that
we actually want to free (namely, ones that have read_cb and write_cb as
callbacks).

Only *after* returning from event_base_foreach_event(), call
event_free_finalize on all these events.

Fixes: 8653320 ("main: close active connections on shutdown")
Signed-off-by: Robin Jarry <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docs Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant