<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en" style="--code-editor-font: var(--default-mono-font, "GitLab Mono"), JetBrains Mono, Menlo, DejaVu Sans Mono, Liberation Mono, Consolas, Ubuntu Mono, Courier New, andale mono, lucida console, monospace;">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>
GitLab
</title>
<style data-premailer="ignore" type="text/css">
a { color: #1068bf; }
</style>
<style>img {
max-width: 100%; height: auto;
}
body {
font-size: .875rem;
}
body {
-webkit-text-shadow: hsla(0,0%,100%,.01) 0 0 1px;
}
body {
font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; font-size: inherit;
}
</style>
</head>
<body style="font-size: inherit; -webkit-text-shadow: hsla(0,0%,100%,.01) 0 0 1px; font-family: "GitLab Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";">
<div class="content">
<p class="details" style="font-style: italic; color: #626168;">
<a href="https://gitlab.rtems.org/sebhub">Sebastian Huber</a> created a merge request: <a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1485">!1485</a>
</p>
<div class="branch">
Project:Branches: sebhub/rtems:up/timer-server-delete to rtems/rtos/rtems:main
</div>
<div>
Author: Sebastian Huber
</div>
<div class="md gl-mt-5" style="position: relative; z-index: 1; color: #3a383f; word-wrap: break-word; margin-top: 1rem;">
<h2 id="user-content-summary" dir="auto" style="margin-top: 0px; margin-bottom: 10px;" align="initial">Summary<a href="#summary" aria-label="Link to heading 'Summary'" data-heading-content="Summary" class="anchor" style="margin-top: 0px;"></a>
</h2>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">Issue <a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5741" title="score: A watchdog service routine can run on a freed object" class="gfm gfm-issue" data-original="#5741" data-link="false" data-link-reference="false" data-issue="29972" data-project="26" data-iid="5741" data-namespace-path="rtems/rtos/rtems" data-project-path="rtems/rtos/rtems" data-issue-type="issue" data-container="body" data-placement="top" data-reference-type="issue" style="margin-top: 0px;">#5741</a>: score: A watchdog service routine can run on a freed object</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">Issue <a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/work_items/5757" title="rtems: The delete of a timer frees an object which the server reads" class="gfm gfm-issue" data-original="#5757" data-link="false" data-link-reference="false" data-issue="29991" data-project="26" data-iid="5757" data-namespace-path="rtems/rtos/rtems" data-project-path="rtems/rtos/rtems" data-issue-type="issue" data-container="body" data-placement="top" data-reference-type="issue" style="margin-top: 0px;">#5757</a>: rtems: The delete of a timer frees an object which the server reads</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">Twelve commits on the branch of section 51. Six of them pre-qualify the
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;"><sys/lock.h></code> condition variables and add the support header
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">condimpl.h</code>, which hands a component the thread queue of a condition
variable. The timer server fix below uses it.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The first of the other six counts the tickle phases of a processor and
adds <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">_Watchdog_Wait_for_service_stop()</code>. <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">_Watchdog_Tick()</code> increments
the count at the begin of a phase and stores the next even count at the
end. An odd count therefore names a processor whose collections may run
a service routine. The wait reads that count with an acquire load and
waits out the phase which it found. The same commit takes the wait into
the free paths of the four object classes which own a watchdog: the
Classic timer, the period, the POSIX timer and the thread.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The second commit closes the other producer of a tickle. <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">_TOD_Set()</code>
tickles the realtime collection of every processor at task level, and no
count covers it. The directive obtains the object allocator mutex
instead of the TOD mutex, and every delete directive obtains that mutex
before it frees an object. The TOD mutex loses its last user. A timer
service routine of a set runs under the mutex, so it may create and
delete no object. The item of <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">rtems_clock_set()</code> says so, and two
routines of <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">sp11</code> drop the check which forbids the mutex.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">Two validation tests follow, one for the window of a tickle and one for
the window of a clock set. Each arms a timer on the processor of the
runner, holds the service routine in the window, and checks that the
delete of a worker on the second processor ends after the routine
returns.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The fifth commit repairs <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">rtems_timer_delete()</code> for the Timer Server
task, which is the second issue. <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">_Timer_server_Body()</code> marks the ticker
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">WATCHDOG_INACTIVE</code> and calls the routine outside the lock, and that
state names two other situations as well. The server gains a condition
variable and a member which states whether it runs the routines of a
phase. The thread queue lock of that condition variable is the lock of
the server, so a caller cannot separate the read of the member from its
own enqueue. The directive releases the object allocator mutex around
the wait, because a service routine of the server may obtain it. It
takes the thread life protection, because that release ends the
protection which the mutex gives. A system with no timer server and a
delete from the server itself need no wait.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The last commit adds the validation test of that requirement. The
routine of the timer blocks in the Timer Server task and lets a worker
delete the timer. Each of the three new tests fails without its fix.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The sporadic server timer of the POSIX API keeps the window.
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">_POSIX_Threads_Terminate_extension()</code> removes it under the <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">Join_queue</code>
lock. <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">_POSIX_Threads_Sporadic_timer()</code> re-arms it under
<code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">Wait.Lock.Default</code>. A wait closes that order by no means, so the first
issue stays open.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The test suite of <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; margin-top: 0px; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">sparc/gr740</code> runs in the four configurations. The two
release configurations report no regression. The two debug
configurations report four failures which this branch does not cause.</p>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial"><strong style="font-weight: 600; margin-top: 0px;">BSP</strong> <code style="font-size: 90%; color: #18171d; word-wrap: break-word; background-color: #ececef; border-radius: .25rem; font-weight: inherit; overflow-wrap: break-word; white-space: break-spaces; font-family: "GitLab Mono", "JetBrains Mono", "Menlo", "DejaVu Sans Mono", "Liberation Mono", "Consolas", "Ubuntu Mono", "Courier New", "andale mono", "lucida console", monospace; font-variant-ligatures: none; word-break: keep-all; padding: 0.125rem 0.25rem;">sparc/gr740</code> in four configurations · <strong style="font-weight: 600;">Simulator</strong> SIS</p>
<h2 id="user-content-ai-details" dir="auto" style="margin-top: 20px; margin-bottom: 10px;" align="initial">AI Details<a href="#ai-details" aria-label="Link to heading 'AI Details'" data-heading-content="AI Details" class="anchor" style="margin-top: 0px;"></a>
</h2>
<h3 id="user-content-prompt-used" dir="auto" style="margin-top: 1.5rem; margin-bottom: 1rem; font-weight: 600; font-size: 1.125rem; letter-spacing: inherit; line-height: 1.25; color: #18171d;" align="initial">Prompt used<a href="#prompt-used" aria-label="Link to heading 'Prompt used'" data-heading-content="Prompt used" class="anchor" style="margin-top: 0px;"></a>
</h3>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">None as a single prompt. The work was done in an interactive Claude Code
session on the RTEMS tree. The task was to run the test suites of the
simulator BSPs, diagnose every failure and fix the cause. Each change was
directed and reviewed.</p>
<h3 id="user-content-ai-model-used" dir="auto" style="margin-top: 1.5rem; margin-bottom: 1rem; font-weight: 600; font-size: 1.125rem; letter-spacing: inherit; line-height: 1.25; color: #18171d;" align="initial">AI model used<a href="#ai-model-used" aria-label="Link to heading 'AI model used'" data-heading-content="AI model used" class="anchor" style="margin-top: 0px;"></a>
</h3>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">Claude Opus 5 (claude-opus-5), through Claude Code.</p>
<h3 id="user-content-how-ai-was-used-for-the-contribution" dir="auto" style="margin-top: 1.5rem; margin-bottom: 1rem; font-weight: 600; font-size: 1.125rem; letter-spacing: inherit; line-height: 1.25; color: #18171d;" align="initial">How AI was used for the contribution<a href="#how-ai-was-used-for-the-contribution" aria-label="Link to heading 'How AI was used for the contribution'" data-heading-content="How AI was used for the contribution" class="anchor" style="margin-top: 0px;"></a>
</h3>
<ul class="task-list" dir="auto" style="text-align: initial; list-style-type: disc; margin: 0px 0px 1rem; padding: 0;">
<li class="task-list-item" style="margin-top: 0px; line-height: 1.6em; margin-left: 25px; padding-left: 3px; position: relative; min-height: 22px; padding-inline-start: 32px; list-style-type: none; margin-inline-start: 0 !important;">
<input type="checkbox" class="task-list-item-checkbox" disabled aria-label="Check option: Formatting" style="margin-top: 0px; position: absolute; inset-inline-start: 8px; inset-block-start: 3px; all: unset; display: block; width: 1rem; height: 1rem; cursor: pointer; box-sizing: border-box; border-radius: .25rem; background-color: #ffffff; border: 1px solid #89888d;"> Formatting</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; position: relative; min-height: 22px; padding-inline-start: 32px; list-style-type: none; margin-inline-start: 0 !important;">
<input type="checkbox" class="task-list-item-checkbox" disabled aria-label="Check option: Test creation." style="margin-top: 0px; position: absolute; inset-inline-start: 8px; inset-block-start: 3px; all: unset; display: block; width: 1rem; height: 1rem; cursor: pointer; box-sizing: border-box; border-radius: .25rem; background-color: #ffffff; border: 1px solid #89888d;"> Test creation.</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; position: relative; min-height: 22px; padding-inline-start: 32px; list-style-type: none; margin-inline-start: 0 !important;">
<input type="checkbox" class="task-list-item-checkbox" checked disabled aria-label="Check option: Code comments." style="margin-top: 0px; position: absolute; inset-inline-start: 8px; inset-block-start: 3px; all: unset; display: block; width: 1rem; height: 1rem; cursor: pointer; box-sizing: border-box; border-radius: .25rem; background-color: #ffffff; border: 1px solid #89888d;"> Code comments.</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; position: relative; min-height: 22px; padding-inline-start: 32px; list-style-type: none; margin-inline-start: 0 !important;">
<input type="checkbox" class="task-list-item-checkbox" disabled aria-label="Check option: The entire contribution was generated using AI" style="margin-top: 0px; position: absolute; inset-inline-start: 8px; inset-block-start: 3px; all: unset; display: block; width: 1rem; height: 1rem; cursor: pointer; box-sizing: border-box; border-radius: .25rem; background-color: #ffffff; border: 1px solid #89888d;"> The entire contribution was generated using AI</li>
<li class="task-list-item" style="line-height: 1.6em; margin-left: 25px; padding-left: 3px; position: relative; min-height: 22px; padding-inline-start: 32px; list-style-type: none; margin-inline-start: 0 !important;">
<input type="checkbox" class="task-list-item-checkbox" disabled aria-label="Check option: AI code completion such as Copilot in VSCode." style="margin-top: 0px; position: absolute; inset-inline-start: 8px; inset-block-start: 3px; all: unset; display: block; width: 1rem; height: 1rem; cursor: pointer; box-sizing: border-box; border-radius: .25rem; background-color: #ffffff; border: 1px solid #89888d;"> AI code completion such as Copilot in VSCode.</li>
</ul>
<p dir="auto" style="color: #3a383f; margin: 0px 0px 1rem;" align="initial">The diagnosis and the implementation were produced in that session under my
direction, and the commit messages were drafted there.</p>
<h3 id="user-content-access" dir="auto" style="margin-top: 1.5rem; margin-bottom: 1rem; font-weight: 600; font-size: 1.125rem; letter-spacing: inherit; line-height: 1.25; color: #18171d;" align="initial">Access<a href="#access" aria-label="Link to heading 'Access'" data-heading-content="Access" class="anchor" style="margin-top: 0px;"></a>
</h3>
<p dir="auto" style="color: #3a383f; margin: 0px;" align="initial">I have not used a product which claims copyright in its output, and I have
legitimate access to the one I used.</p>
</div>
</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #626168;">
—
<br>
<a href="https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1485">View it on GitLab</a>.
<br>
You're receiving this email because of your account on <a target="_blank" rel="noopener noreferrer" href="https://gitlab.rtems.org">gitlab.rtems.org</a>. <a href="https://gitlab.rtems.org/-/namespace/49/sent_notifications/5-77kpf1p0773svg6iajxo1hda6-1d/unsubscribe" target="_blank" rel="noopener noreferrer">Unsubscribe</a> from this thread · <a href="https://gitlab.rtems.org/-/profile/notifications" target="_blank" rel="noopener noreferrer" class="mng-notif-link">Manage all notifications</a> · <a href="https://gitlab.rtems.org/help" target="_blank" rel="noopener noreferrer" class="help-link">Help</a>
<span style="color: transparent; font-size: 0; display: none; overflow: hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0;">
Notification message regarding https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1485 at 1789119248
</span>
<script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","action":{"@type":"ViewAction","name":"View Merge request","url":"https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1485"}}</script>
</p>
</div>
</body>
</html>