Fix oo_exit_hook hang in multithreaded scenarios#330
Open
liujinhui-job wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem Description:When using my test program to test multithreading, I found that sometimes the main thread gets stuck when the program exits, preventing it from terminating. The call stack shows it is blocked at CITP_FDTABLE_LOCK_RD.
I tried changing CITP_FDTABLE_LOCK_RDto CITP_FDTABLE_LOCK/ CITP_FDTABLE_UNLOCK, and the issue no longer occurs. In fact, the root cause has not been identified; I only believe that replacing it with CITP_FDTABLE_LOCKdoes not affect the program logic, and the problem is no longer reproducible.
Moreover, I analyzed the function uncache_active_netifs called after acquiring the lock, and found that it uses CITP_FDTABLE_ASSERT_LOCKED instead of CITP_FDTABLE_ASSERT_LOCKED_RD. Therefore, I believe CITP_FDTABLE_LOCK should be used instead of CITP_FDTABLE_LOCK_RD. I am not sure if my analysis is correct.
The test code is shown below.
Usage: %s <dst_ip> <dst_port> <pkts_per_thread> <pkt_size>
Test method:
./udp_client 10.0.0.33 8888 99 1 512
Yes, I created 99 threads, and I found that the program would hang indefinitely on exit and the process could not terminate.