You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Adjust acquisition thread to never overwrite circular buffer, keep track of pending frames, always fetch oldest frame. - #47
Report allocation failures before publishing acquisition status
kinetixApp/src/ADKinetix.cpp:974
When buffer allocation or frame-info creation fails, execution still publishes ADStatusWaiting or ADStatusAcquire, skips the acquisition loop, and ends with ADStatusIdle. This hides the startup failure from status consumers. Clean up and return with ADStatusError before publishing an acquiring status.
Prevent signed overflow at INT32_MAX frame number
kinetixApp/src/ADKinetix.cpp:1009
If a continuous acquisition reaches INT32_MAX, the next comparison evaluates lastFrameNr + 1 with signed 32-bit arithmetic, causing undefined behavior. Promote the addition to 64 bits to keep this comparison safe at the frame-number boundary.
Startup failure status is overwritten before publication
kinetixApp/src/ADKinetix.cpp:962
For an invalid circular-buffer size or allocation failure, this error status is overwritten by the Waiting/Acquire assignment below before any parameter callback publishes it. Cleanup then reports Idle, so PV clients see a normal completion with zero frames rather than a startup failure. Clear ADAcquire, publish ADStatusError, and release the port lock before returning from this failure path.
Per-frame stdout logging stalls readout under locks
kinetixApp/src/ADKinetix.cpp:1014
This writes to stdout for every continuous frame while both the port lock and the oldest buffer slot are held. A slow or blocked IOC console can stall readout and prevent timely slot release, and disabling asyn tracing does not disable this output. Use the existing trace-controlled DEBUG_ARGS logging instead.
Failed buffer allocation status is overwritten before publication
kinetixApp/src/ADKinetix.cpp:962
If the configured buffer exceeds UINT32_MAX bytes or calloc fails, ADStatusError is overwritten by Acquire/Waiting before callParamCallbacks(), then by Idle during cleanup. Clients therefore never receive the failed-start status. Clear ADAcquire, publish the error, release the port lock, and return from this branch; neither the frame buffer nor FRAME_INFO has been allocated here.
🧠 Review effort: Balanced
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
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.