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

Fix #1027, defer cancellation when BSP locked #1028

Merged

Conversation

jphickey
Copy link
Contributor

Describe the contribution

Resolves two related issues:

  • OS_TaskGetId does not return a valid value for tasks where cancellation is pending, but they are still running. This in turn is likely to trigger other (bogus) debug checks which invoke OS_DEBUG and in turn do console writes.
  • The console write itself is a cancellation point, which is now done while holding a BSP mutex. If canceled here, then the mutex is not released.

Solution is in two parts:

  • OS_TaskGetId should return the task ID it knows about, regardless of whether the task is pending cancellation or not.
  • Defer cancellation of the task while the BSP is locked, ensure it reaches the unlock, then restore the previous cancel state.

Fixes #1027

Testing performed
Run mutex-test repeatedly, ensure no deadlocks

Expected behavior changes
No chance of deadlock, and also fixes a bogus debug message about unlocking from the wrong task if the task is pending delete.

System(s) tested on
Ubuntu

Contributor Info - All information REQUIRED for consideration of pull request
Joseph Hickey, Vantage Systems, Inc.

Resolves two related issues:
- OS_TaskGetId does not return a valid value for tasks where cancellation
  is pending, but they are still running.  This in turn is likely to trigger
  other (bogus) debug checks which invoke OS_DEBUG and in turn do console writes.
- The console write itself is a cancellation point, which is now done while
  holding a BSP mutex.  If canceled here, then the mutex is not released.

Solution is in two parts:
- OS_TaskGetId should return the task ID it knows about, regardless of whether
  the task is pending cancellation or not.
- Defer cancellation of the task while the BSP is locked, ensure it reaches the
  unlock, then restore the previous cancel state.
@skliper
Copy link
Contributor

skliper commented May 19, 2021

@astrogeco requesting fastrack, bugs at this point have a high impact.

@astrogeco astrogeco changed the base branch from main to integration-candidate May 20, 2021 13:03
@astrogeco astrogeco added IC:2021-05-20 CCB:Ready Pull request is ready for discussion at the Configuration Control Board (CCB) labels May 20, 2021
@astrogeco astrogeco merged commit 7cfcab5 into nasa:integration-candidate May 20, 2021
@astrogeco astrogeco removed the CCB:Ready Pull request is ready for discussion at the Configuration Control Board (CCB) label May 26, 2021
@jphickey jphickey deleted the fix-1027-bsp-nocancel branch May 26, 2021 18:48
@skliper skliper added this to the 6.0.0 milestone Sep 24, 2021
jphickey added a commit to jphickey/osal that referenced this pull request Aug 10, 2022
Fix nasa#777, Use MSG APIs - Core software
Fix nasa#777, Use MSG APIs - Docs
Fix nasa#777, Use MSG APIs - Unit tests

See nasa/cFE#998 for more details
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Occasional deadlock issue in tests that delete tasks
3 participants