fix(tc): prevent runaway CPU and blocking in transcoder handling #17
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.
Walkthrough - Runaway CPU and Blocking Fixes
Resolves #15
I have implemented fixes to address high CPU usage and hanging behavior related to transcoder (
tcd) connections.Changes Made
Transcoder Socket Handling (
TCSocket.cpp)CTCServer::Receivethat is triggered when a transcoder module is not connected. This preventsCCodecStreamthreads from spinning in a tight high-frequency loop whentcdis unreachable.CTCServer::Acceptto be non-blocking. It now usespollwith a 100ms timeout on the listening socket. If no connections are pending, it returns immediately instead of waiting indefinitely. This ensures the mainMaintenanceThreadcan continue updating the dashboard even if some transcoder modules are disconnected.Verification Results
Build Verification
I verified that the code compiles successfully by running a build inside the
urfd-runnerDocker container.Note
During verification, I temporarily disabled DHT and strict
-Werrorflags to accommodate the testing environment. These were fully reverted after the build was confirmed.How to Verify
urfdwith transcoder modules configured but withouttcdrunning.urfdprocess).tcdand verify thaturfdgracefully picks up the connections within a few seconds (nextMaintenanceThreadcycle).render_diffs(file:///Users/dbehnke/development/urfd/reflector/TCSocket.cpp)