vcswatch reports that
this package seems to have a new changelog entry (version
1:2.10.0~pre2, distribution
UNRELEASED) and new commits
in its VCS. You should consider whether it's time to make
an upload.
Here are the relevant commit messages:
commit 062dc7c097693bb68e76192516cd92878dd5ecdf
Merge: 3a1c48a1 c9b2331c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 21 16:40:04 2026 +0800
Merge pull request #4703 from grandixximo/crashdump-coredumpctl-exe
tests/ui-smoke: match the versioned python in coredumpctl
commit c9b2331cdeb6fd90791daadf3f7ad2867127a552
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 21 12:27:42 2026 +1100
tests/ui-smoke: find our own core in coredumpctl
systemd-coredump lists the cores of every sandbox of a parallel run, and the PID it records is the host one, so taking the newest python core since arming can give one test the core of another. Hannes Diethelm pointed this out on #4703. Tag the launcher's environment with a UUID, which systemd-coredump keeps with the core, and dump the core whose environment carries the tag.
commit 616a2e0a68da19240aeb8c065b2d29facfb0d099
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 19 15:21:59 2026 +1100
tests/ui-smoke: match the versioned python in coredumpctl
A bare name given to coredumpctl matches the command name, and the GUIs run from a "#!/usr/bin/python3.13" line, so systemd-coredump records them as "gmoccapy", "qtvcp" and so on, with /usr/bin/python3.13 as the executable. The "python3" match found nothing and crashdump.sh never got the core. Match the resolved path of python3 instead, which coredumpctl compares with the executable, and give the same path to gdb. Hannes Diethelm found it in #4648.
commit 3a1c48a1eeb8cbeaf47b00c6e2dd815cff81b1f6
Merge: 55e5db94 990d9817
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 10:54:34 2026 +0800
Merge pull request #4663 from grandixximo/ci-no-sudo
tests: drop sudo from the test suite and the package CI job
commit 55e5db94ba9ba39db622da4a8d4108bb48e1f000
Merge: 60972dfd 4c2f5863
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 09:30:19 2026 +0800
Merge pull request #4684 from grandixximo/raster-enabled-flicker
raster: do not show a running raster as disabled mid-cycle
commit 60972dfd735676a9576bb1d8ad96c0515c8eec9f
Merge: f5120aca 92c9fac8
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 09:15:03 2026 +0800
Merge pull request #4680 from grandixximo/g282-homing-runs
task: count a G28.2 homing run that ends between two status reads
commit f5120aca9f86688aa0d9480f507ec0132b8c1f15
Merge: 73d80f4f 25d86247
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 09:08:45 2026 +0800
Merge pull request #4666 from grandixximo/probe-queue-test
task: do not take a motion status from before a command as current (#3650)
commit 25d86247d629cf319402fef8f2ee47ff03fe0de2
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 17 16:15:15 2026 +1100
tests: stale-motion-status: slow the controller only once task is up
At startup task reads the motion status once a second and gives up
after ten tries. The tries come at the same point of the servo period
each time, so with slowkins keeping the controller busy for most of
the period from load on, all ten could miss the free part of the
period: "can't read motion status" under load (#4669). With a wait of
99% of the period from load the startup failed that way in some runs.
slow-controller now sets the wait once task has handled its first
command. The commands after it still run with the controller busy for
most of the period, and pass with a wait of 99% too.
commit 81e10e1e44fe225d20791e2f34a1cb1ce0e41c4c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 12:18:40 2026 +1100
tests: add stale-motion-status
Probe at alternating heights, and check that the machine is on and in
auto mode once wait_complete() returns. late-controller runs the
controller a 50 ms servo period after the command handler,
slow-controller uses kinematics that make the controller take most of
the servo period, so that status reads fail. Both fail on master, and
each needs one of the two changes before.
commit dfc6bc0feb2d1f47057eb12140ed3a8362d17e43
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 12:18:03 2026 +1100
task: keep motion busy when a status read fails after a command
emcMotionUpdate() returns early when the status or config read fails,
which happens while motion-controller runs, and leaves the motion status
as it was. Right after a command that copy predates it, and with a probe
just queued it says motion is done. Report motion busy until a read that
has seen the command succeeds.
commit 36bd00ecf849cb448c37ce4de4228320972b249f
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 12:18:03 2026 +1100
motion, task: report motion busy until the controller has acted on a command
Motion echoes a command in motion-command-handler, but motion-controller
acts on it: it queues the move, enables the machine, switches mode, and
then publishes the queue depth and state. A status read between the two
shows the command taken and motion idle, so task takes motion as done.
After a G38 move the SYNCH then finishes at once and the next line reads
the result of the probe before, or fails with "Queue is not empty after
probing" (#3650), and wait_complete() returns before the machine is on
or in auto mode.
Record the heartbeat at which each command is echoed, and report motion
busy until the heartbeat has moved past it, that is until the controller
has run once after taking the command. motion-logger has no controller
and counts each command as acted on.
Both heartbeat fields are rtapi_u64, the RTAPI type for headers RT code
includes.
commit a98404d669647c0b5138501fdb097d7477f944bf
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 12:48:30 2026 +1100
tests: probe-queue-not-empty: wait for machine on and each home
The test sent the home commands right after the machine-on command, all
three at once. Wait until the machine is on, and home one joint at a
time, since a home command is refused while another joint homes.
commit 5a4f0b1cb9e11ab4805113afba9203e245c45008
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 09:49:45 2026 +1100
tests: add probe-queue-not-empty for the AUTO read-ahead race (#3650)
Runs 100 G38.2 probes in AUTO mode and fails on "Queue is not empty
after probing". A test-only comp busy waits between
motion-command-handler and motion-controller, so task often sees motion
idle right after the probe was queued. Fails without af6b5b75ca, passes
with it.
commit 73d80f4f64bab3b292b1d1d81ce08067ca3d243d
Merge: 25606fe4 52c66ef3
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 08:39:14 2026 +0800
Merge pull request #4672 from grandixximo/motion-split-read
motion: fix the split read check on the shared status structs
commit 25606fe432ea5eeecf5d383a4e273b695926b951
Merge: 215f80df ef51ef92
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 08:23:58 2026 +0800
Merge pull request #4674 from grandixximo/flaky-tests-4669
tests, task: fix load-dependent test failures
commit 215f80df728b166738e2aa1130dd70b66a1a3b05
Merge: 3840f8e3 47e461c4
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 08:08:46 2026 +0800
Merge pull request #4696 from grandixximo/gmoccapy-sigterm-fork
gmoccapy: exit on a SIGTERM lost in a fork hook at startup
commit 3840f8e3d51f75f2a2412fb7889d6fc985e92df1
Merge: 4ab38b42 565cdcc7
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 07:53:30 2026 +0800
Merge pull request #4695 from grandixximo/tooldb-notify-newline
tooldata: send each db notification as one line
commit 4ab38b42f3df96c24dc810d4132ada005242407e
Merge: b99baf8e cc15b0df
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 18 07:38:12 2026 +0800
Merge pull request #4694 from grandixximo/hal-stop-wait
hal: stop returns once no thread runs a function
commit ef51ef92316a3468baddb814650ef967b57ef880
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 17 16:19:07 2026 +1100
tests/ui-smoke: no import in the qtdragon shim's SIGUSR1 handler
The launcher sends SIGUSR1 every second from qtvcp's interpreter
startup on, until the shim's handler has saved a screenshot. The
handler imported qtpy.QtCore. A signal that arrived while qtvcp's own
first import of PyQt5.QtCore was loading PyQt5.sip ran that import a
second time inside the first, and sip refused the outer one: "the sip
module has already registered a module called PyQt5.QtCore", and
qtdragon-quit found no window (#4669).
The handler now does nothing until qtpy.QtCore has its QTimer; the
launcher asks again. Raising the signal at that point of the import
gives the error with the old handler every time, the new one imports.
commit 51f56f28a603bb852ce43479ebcb7986a4e6691d
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 17 16:19:07 2026 +1100
tests: home one joint at a time
Motion refuses to home a joint while another one is homing ("Homing not
possible until current homing process is finished."). Ten tests sent
back to back home commands for their joints and then waited for all of
them, which works only while each home finishes before the next command
reaches motion. Under load it does not: abort/stop-button-crazy-move
timed out with joint 2 unhomed (#4669).
linuxcnc_util gains home_joints(), which homes the joints one after the
other and waits until each is homed and no joint is homing any more;
the homing flags stay set until motion accepts the next home. With
joint 0 homing through a 2 s final move, the old sequence fails
stop-button-crazy-move on every run and home_joints() passes.
commit 47e461c498eb2a58814ef96cfb453f7d483daeed
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 17 15:55:10 2026 +1100
gmoccapy: exit on a SIGTERM lost in a fork hook at startup
The startup SIGTERM handler exits through SystemExit and records the
request, and main() checks the record once the constructor returns.
The postgui HAL files run after that check, through os.spawnvp(), and
its os.fork() runs the at-fork hooks; Python ignores an exception
raised in a hook, so a SIGTERM that arrived while one ran (logging
registers one) was lost: "Exception ignored in: <function _afterFork>",
then the full handler was installed and Gtk.main() ran.
ui-smoke/gmoccapy-quit failed that way under load (#4669), with the GUI
still running 15 s after the SIGTERM.
Check the record again once the full handler is installed, right before
the main loop. With a fork hook that sleeps 3 s the test fails on every
run without this and passes with it.
commit 565cdcc764a6fe6cde14d3102789a07dfe8e019a
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 17 15:51:00 2026 +1100
tooldata: send each db notification as one line
tooldata_format_toolline() ends the tool line with a newline since
088be31097, and tooldata_db_notify() added another one, so every l, u
and p notification also sent the db program an empty line. tooldb.py
answers an empty line with "NAK empty_line", so a notification got two
replies, and task reads one per request. When task read the first reply
alone, the NAK stayed in the pipe and was taken as the reply to the
next request, which then returned before the db program had handled it.
tests/tooldb/db-g10-offset failed that way under load (#4669): the
G10 L11 finished and the test read tool 5 from the db program's file
before the db program had saved the new offset. With a db program that
takes 0.5 s per update the test fails on every run.
commit cc15b0df7f0700cd5fd5158cf9f882e4ca34b628
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 17 15:40:13 2026 +1100
hal: stop returns once no thread runs a function
hal_stop_threads() only cleared threads_running. A thread in the middle
of its pass went on running the rest of its functions, so a halcmd stop
followed by unloadrt, which is how linuxcnc shuts down, could unload a
component while the thread was still executing its function, and
rtapi_app crashed in thread_task(). Hannes Diethelm found it in tests
whose functions keep the servo thread busy for most of the period
(#4669).
Each thread now marks itself busy before it reads threads_running and
clears the mark after its pass. In a user process hal_stop_threads()
clears threads_running, then waits until no thread is busy, at most
1000 of the thread's periods; a stuck thread makes it fail with
-ETIMEDOUT. With both flags sequentially consistent atomics, either the
thread sees the stop or the stop sees the pass. Called from realtime
code it does not wait, as before.
delf with the threads stopped trusted threads_running alone. It now
also waits until the thread has finished its pass, which matters for a
stop from realtime code and for a stop that runs while delf waits.
tests/hal-delf-live holds the thread inside a function across a stop;
the stop must not return before the thread has left it.
commit b99baf8e3904106a9feb719ab96076b6b296944e
Merge: 003caba7 b26462f5
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 16:44:48 2026 +0800
Merge pull request #4681 from SyncTwin/synctwin/hal-strerror-ealready
hal: hal_strerror() texts for -EALREADY/-EBUSY; rtapi_delay() doc
commit b26462f5fc4989aa70dedd7346cc4519f8178655
Author: yurc <yurik.x@gmail.com>
Date: Thu Oct 15 05:25:37 2026 +0300
docs: rtapi_delay_max(): the value is implementation dependent
1/4 of the clock period holds only for RTAI kernel modules
(rtai_rtapi.c). uspace realtime modules return a fixed 10000 ns
(uspace_rtapi_main.cc), user processes 999999999 ns (uspace_ulapi.c,
rtai_ulapi.c).
Signed-off-by: yurc <yurik.x@gmail.com>
commit 005609a05ec47d043c96b22978641fce99884e2b
Author: yurc <yurik.x@gmail.com>
Date: Wed Oct 14 18:42:55 2026 +0300
docs: rtapi_delay(3): discourage calls from realtime tasks
Except in RTAI kernel modules rtapi_delay() sleeps, so a realtime task
may wake up considerably later than requested and lose its timing.
Keep init/cleanup code as the supported use.
Signed-off-by: yurc <yurik.x@gmail.com>
commit 772d526e63ae710f1c2253c956096ae821c7a38d
Author: yurc <yurik.x@gmail.com>
Date: Wed Oct 14 16:38:14 2026 +0300
rtapi: rtapi_delay() sleeps except in RTAI kernel modules
rtapi.h and rtapi_delay(3) say it simply loops, wasting CPU cycles, and
rtapi.h says user processes may not call it. Only RTAI kernel modules
busy-wait (rt_busy_sleep()). uspace realtime modules sleep through the
backend (clock_nanosleep() on POSIX and Xenomai, evl_sleep_until() on
EVL, rt_sleep() on RTAI), and user processes have rtapi_delay() too and
sleep with clock_nanosleep() (hal_lib uses it in ULAPI).
Signed-off-by: yurc <yurik.x@gmail.com>
commit c515a1b0bb8c3ae3b2ca32e4104912cea3333ac2
Author: yurc <yurik.x@gmail.com>
Date: Wed Oct 14 16:38:14 2026 +0300
halcmd: unloadrt init entry error text from hal_strerror()
The message used strerror() because hal_strerror() had no text for
-EALREADY ("Operation already in progress" for an init cycle that has
already run).
Signed-off-by: yurc <yurik.x@gmail.com>
commit ad8aed4afb3ae567a91c30e257c9645617553d5a
Author: yurc <yurik.x@gmail.com>
Date: Wed Oct 14 16:38:14 2026 +0300
hal: hal_strerror(): texts for -EALREADY and -EBUSY
hal_init_funct_to_thread() and hal_del_init_funct_from_thread() return
-EALREADY once the init cycle has run, and funct_entry_release() returns
-EBUSY when a function is removed from a running thread in RTAPI. Callers
that report errors through hal_strerror() got "unknown error" for both.
Signed-off-by: yurc <yurik.x@gmail.com>
commit 003caba72a92393f2175d3f7503bd0e9d6865b6c
Merge: c555f858 c8bb7d74
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 15:03:29 2026 +0800
Merge pull request #4673 from grandixximo/tool-frame-checker
tests: tool-frame checks the helpers as a realtime component
commit 52c66ef3061d25e520854b4f2e7a6302ee4da7f9
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 14:14:05 2026 +1100
motion: fix the split read check on the shared status structs
Task kept a copy of emcmotStatus, emcmotConfig or emcmotInternal when
the copied head equalled the copied tail. head is copied first and
tail last, so a copy that straddled the start or the end of a write was
kept torn; about 0.2% of status reads were, on x86 and ARM.
Read tail before the copy and head after it, with release/acquire
ordering so ARM cannot reorder the counters and the data, in a new
rtapi_seqlock.h used by every writer and reader. The counters widen to
unsigned int and stay plain fields, so the structs stay trivially
copyable in C++.
Also protect the writes that bypassed the counters: five commands that
changed emcmotConfig without emcmot_config_change(), so task never
re-read them, the controller's writes to emcmotInternal, and
emcmotSetCycleTime() running before the controller's window opened.
tests/rtapi-seqlock checks rtapi_seqlock_read() against a writer
thread and fails on any torn copy kept.
commit 4c2f5863c8f6fe8f9eb9eb2c221488e9e8d3d0bd
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 16:07:39 2026 +1100
raster: do not show a running raster as disabled mid-cycle
The function cleared enabled at the top of every cycle and set it again
in the RUN state, so a non-realtime reader polling the pin could see 0
while the raster ran. After stop() it then saw 0 before the function had
handled the stop, wrote the next program header, and the stop's
hal_port_clear() wiped it; the next start read pixel data as the header
and faulted with InvalidBPP. Write enabled once per state instead, and
only clear it once a stop has been handled.
Found by Hannes Diethelm's parallel test runs (#4669). A 2ms delay after
the old clear fails tests/raster 2 of 3; with this change it passes.
commit 2d8c5d72bd9522a60af741c9fffafd1942aa6fc6
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 15:42:56 2026 +1100
tests/abort/stop-button-crazy-move: wait up to 60s instead of 10s
Each wait ends as soon as its condition holds, so the limit only matters
on a slow machine. Under heavy parallel load the queue had reached 948
of the 1000 segments after 10s.
Part of #4669.
commit 3928a06922d95095730e98a3dee58b5367cc3a7e
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 15:42:56 2026 +1100
tests/remap/remap-io: read the pre-test status before setting the input
The test set the input pin and then polled status for the "pre" line,
expecting the old value. Motion copies the pin within a servo cycle, so
under load the poll saw the new one. Poll first.
Part of #4669.
commit e80d4036012d1ac2964351218d375d1cfde02acf
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 15:29:09 2026 +1100
gmoccapy sim: give X and Z their own home switches
The gmoccapy sim joined the X and Z switches through or2. X homes to 10,
past its switch, so after a home all the shared input stayed active and
a second home all always failed: Z started on the switch, backed off
without clearing it and aborted ("j2 end of move in home state 5").
Under load any interrupted first home led the ui-smoke test into this.
Wire each switch to its own joint, as lib/hallib/simulated_home.hal does.
Part of #4669.
commit c555f8584ac06a305b99934ac71adde55eedae6b
Merge: eab77269 2d7d09ac
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 10:16:49 2026 +0800
Merge pull request #4461 from grandixximo/exported-headers-dir
include: move the exported headers into a directory of their own
commit 2d7d09ac7ae2cfcdb9427cfc89a2b6cb07b98dc4
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Aug 25 09:03:54 2026 +1000
rtapi: stop exporting the vsnprintf implementation
rtapi_vsnprintf.h is not an interface, and the only code that includes it
is rtai_rtapi.c beside it and the unit test. The documented entry point,
rtapi_vsnprintf(), is declared in rtapi.h and stays exported, so nothing
an out-of-tree component may legitimately call moves.
The header goes to rtapi/ and rtai_rtapi.c takes it from its own directory.
The three exported headers it pulls in go angled, since they are no longer
beside it.
tests/rtapi_printf.0 compiles the header, so it now needs the source tree and
is skipped on installed packages, the same way tests/blendmath already is.
commit f4448fc392a991ae6f0d377cc16cd1425fe4b862
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Aug 25 00:12:47 2026 +1000
include-dep-report: take the exported set from the include directory
SRCHEADERS is gone, so read the directory instead. It is the better source
anyway: the list cannot drift from what is installed when the directory is
the list.
The headers are scanned along with the sources so their own includes still
count, they bucket as "include", and paths print relative to the tree root
rather than to src, which the exported headers now sit beside rather than
under.
The "no in-tree user outside their own directory" section had its meaning
taken away by the move, since no source shares a directory with an exported
header any more. It now reports the headers with at most two in-tree users,
which is the question that section was really asking.
commit 2774865951f0a95ef6cc65e47640c54abf5f80ee
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Oct 15 11:39:41 2026 +1100
include: keep the exported headers where they are used from
The 39 headers listed in SRCHEADERS are the API an out-of-tree component may
use. They were spread over eight source directories, mixed in with the private
headers of the libraries publishing them, and the build copied them into
../include by basename so that an angled include would find them.
That copy is what makes the rule in the comment above SRCHEADERS necessary: a
source beside an exported header must include it quoted, because the copy is
not the file its own directory should compile against, while every other
source must include it angled. Which form is correct therefore depends on
where the includer sits, and getting it wrong is silent, because the wrong
file is found rather than no file.
Keep them in ../include instead, where every compile in and out of the tree
already looks for them. There is then one copy rather than two, nothing sits
beside an exported header, and every source in the tree takes them angled.
SRCHEADERS, the rule that did the copying and headersclean all go; the
directory is the list, and installing it is a wildcard.
27 include sites in 24 files change from quoted to angled. The local hal.h in
hal/user_comps/xhc-whb04b-6 is a different header of the same name and keeps
its "./hal.h" form. Inside include/ the headers keep quoting each other, which
is now simply a same-directory include.
No code changes, no -I flag changes, and $(EMC2_HOME)/include keeps meaning
what it meant.
The cppcheck job ran "make headers" so that include/ was populated before
checking; include/ is now populated in the checkout, so that step and its
build-headers.sh script go too.
commit eab772695b56d22d037dad800ad2b925b615835f
Merge: f6eea684 a950fb55
Author: BsAtHome <bertho@vagrearg.org>
Date: Wed Oct 14 15:24:16 2026 +0200
Merge pull request #4664 from hdiethelm/cppcheck_ubuntu_26.04
cppcheck fixes for ubuntu-26.04
commit 92c9fac82c4e7dc3bcc8be732073cc53eb4fdeda
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 14 23:11:46 2026 +1100
task: count a G28.2 homing run that ends between two status reads
Task decided that a queued home had started by catching homing_active or
a joint's .homing in one of its status reads. Homing in place takes a
few servo cycles, so a run could start and end between two reads. On a
re-home the joints read homed before and after it, and after 2s task
reported "G28.2 home did not start" for a home that had run.
Motion now counts homing_active going true in homing_runs, and task
treats a changed count as started. A home that motion refuses leaves
the count alone, so the start timeout still reports it.
Part of #4669.
commit f6eea6847fe42f70ef877cd6d0216187bf678e10
Merge: b36e0d18 f6ff6078
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 14 20:01:56 2026 +0800
Merge pull request #4679 from grandixximo/preview-plane-cut
preview: a cut from where left-out traverses went counts toward the plane
commit f6ff60787b8cd88133b8b96143894e16e20c5e66
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 14 22:25:18 2026 +1100
preview: a cut from where left-out traverses went counts toward the plane
After G43 or a tool change the preview leaves out the traverses before the first feed, as it always has, and those traverses never reached the plane in effect either. A plane whose first cut starts from them recorded only the cut's end: Sigma1912's program, G68.2, G53.1, G0 X0 Y0 Z50, G0 Z0, G1 X600, drew the first plane small at X 600 instead of over the cut from X 0 to 600.
A traverse left out under a plane now marks the point it reached, and a cut drawn from that point counts its start toward the plane. Only then: counting every left-out traverse would take in the end of a G53.1 orientation move, where the tool stood before the plane, and counting every cut's start would take in a cut that begins before the plane is set.
tests/glcanon/test_workplane.py checks a cut after G43.1 drawn from where the traverses went.
Reported by Sigma1912.
commit b36e0d1822ec32fc167ad2c77abb94a00203d609
Merge: 91231395 f6eadeb2
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 14 17:40:32 2026 +0800
Merge pull request #4630 from SyncTwin/synctwin/hal-delf-quiescence-master
hal: don't free a funct entry the running thread may still use (delf/unloadrt crash)
commit 912313954ee13070c3a97075bc1434648f89351f
Merge: 2655e62f 5a1776f8
Author: BsAtHome <bertho@vagrearg.org>
Date: Wed Oct 14 10:10:21 2026 +0200
Merge pull request #4678 from grandixximo/hal-stream-depth
hal: a stream of depth N holds N samples
commit 6df2b6dfc506d0a2ceb0698b661c534ef985204f
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 14 18:50:24 2026 +1100
tests/ui-smoke: let a slow homing sequence finish instead of homing again
When homing outlasted the 15s attempt, home_all() issued home(-1) again.
In the gmoccapy sim X and Z share one home switch, and X homes to 10,
past its switch, so Z then started on an active switch, backed off
without clearing it and aborted ("j2 end of move in home state 5"),
on every further attempt. Keep waiting while any joint is homing.
Part of #4669.
commit ed1af00c36b909f65de1ca7f40febbfceab25ffc
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 14 18:46:45 2026 +1100
tests/halmodule/stream: print the result before signalling ready
halrun ends the test once the reader is ready, so a reader descheduled
between ready() and print() was interrupted before it printed "pass".
Part of #4669.
commit 5a1776f832141dca919f8732ee052d315dbdb131
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Wed Oct 14 01:29:51 2026 +1100
hal: a stream of depth N holds N samples
The ring keeps one slot free to tell full from empty, so a stream
created with depth N took only N-1 samples. Allocate N+1 slots and keep
reporting N as maxdepth. Drop the +1 that histobinstream and
latencybinstream added for it, and fill the halmodule stream test to
10. Found by Bertho Stultiens in #4674.
commit ff27e51187fc5608d38ea4f753646936134a7ede
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Oct 13 21:52:07 2026 +1100
tests/multiclick, tests/mux: load the whole input before starting
A 100 deep fifo holds 99 samples, and the 100 line input was preloaded
with a fixed 0.5s sleep, so a late halstreamer left the streamer empty
and shifted the end of the output. Use deeper fifos and loadusr -w.
Part of #4669.
commit 5832f8781a9f9dff58973a6e5d3cc3a7ac6fb18c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Oct 13 21:52:07 2026 +1100
task: report a probe move done only once motion has judged it
Motion flags a G38.2/G38.4 move that ended without contact one servo
cycle after the planner goes idle. Task could read that cycle as DONE,
finish the MDI command and miss the error, which linuxcncrsh then
returned for the next command. Wait for emcmotStatus.probing to clear.
Part of #4669.
commit 42170d180e9c2fd3021d5c60af24d0abf6352f05
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Tue Oct 13 21:40:16 2026 +1100
tests/hal-show: mask the id together with its padding
The owner column is right-aligned, so an id below 10 gets one more
leading space and still failed the diff. Reported by Hannes Diethelm.
Part of #4669.
commit f3c816f20e1ddbfe80940d08a5b54cf5e684534a
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 18:38:40 2026 +1100
tests/ui-smoke: skip ESTOP_RESET when the homing retry finds the machine on
ESTOP_RESET leaves traj enabled, so task keeps reporting ON and the
retry after a slow first homing attempt could never succeed.
Part of #4669.
commit 45c4568c16b0e723c26eead87cd728268316f4f8
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 18:38:40 2026 +1100
tests/hal-show: ignore the component id column
halcmd's hal_init() after fork races the loaded module for the next
uspace id, so the owner column changed under load. Mask it as the
mb2hal tests do.
Part of #4669.
commit 79975369da2cbebe8dbe2937a8c3d23911f2afea
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 18:38:40 2026 +1100
tests/motion-logger: let task issue its startup queue before the UI acts
Whether the canon commands queued by interpreter init and the startup
code reach motion depended on how fast the UI sent its first command.
Wait for RCS_DONE (the dwell in startup-gcode-abort) and expect them.
Part of #4669.
commit 32c929f3d55d0d2b51fd67578083000dec1a4fdb
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 18:38:39 2026 +1100
tests/ui-smoke: measure the touchy window only once it is mapped
xwininfo -tree also lists unmapped windows, so under load window-fit
measured touchy at its creation size. Poll for a viewable window of
stable size.
Part of #4669.
commit 5f27a9cb30569ef6e7a5995f799e836c109bd3ba
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 18:38:39 2026 +1100
touchy sim: wait for the test panel before the postgui file
touchy_postgui.hal links touchy_test pins, but the panel was loaded
without -W. Under load the pins did not exist yet and touchy exited.
Part of #4669.
commit 2655e62fe6aa38a6a6fa158aab9655911a393c39
Merge: c67a718d 9ed4ebcf
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 10:23:37 2026 +0900
Merge pull request #4667 from grandixximo/scurve-jog-slowdown
motion: ramp a jog down to a lowered speed on the S-curve planner
commit c67a718de50dc09460cc60c33ca9594b8f53de4d
Merge: 3a7faff4 6b72db84
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 08:50:10 2026 +0900
Merge pull request #4614 from grandixximo/nml-int64-ilp32
libnml: use int64_t instead of long for CMS/NML sizes and ids
commit c8bb7d74e634e7ec0530510b5bd409e2a9ed8c86
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Mon Oct 12 02:13:37 2026 +1100
tests: tool-frame checks the helpers as a realtime component
The test compiled kins_util.c into a userspace program with -DULAPI. Since kins_util.c exports its helpers for switchkins_core, EXPORT_SYMBOL is undefined there, which GCC 13 lets through as an implicit int and GCC 14 rejects, so the test failed to build on GCC 14.
The checks now run in a component loaded after switchkins_core, which exports the helpers, the way tests/kins-jacobian checks the kinematics modules. A failed check fails the load. The checks themselves are unchanged.
Reported by hdiethelm in #4670.
Fixes #4670
commit 3a7faff4bbc2f8cb00dd29856a196ea97defec95
Merge: 49774b45 371d7925
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 23:13:16 2026 +0900
Merge pull request #4643 from Rimas2200/fix/tp-circle-curvature
tp: make helix curvature independent of arc subdivision
commit 6b72db84963d0dc1054f8fd682d0348a67b3ef08
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 21:31:02 2026 +1100
plasmac: print 64-bit sint values arch-neutrally
The plasmac low_cut_volts print used %ld with a hal_get_sint() value
(int64_t), which only matches on LP64. Use PRId64, since
rtapi_print_msg is the only output channel in a realtime component.
The kernel branch of rtapi_stdint.h has no inttypes.h, so give it
PRId64/PRIu64 fallbacks matching printk's long long s64.
commit 247f327d11ee8bc6ba8f0d119aa550f30eea5392
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Fri Oct 2 11:53:26 2026 +0800
libnml: use int64_t instead of long for CMS/NML sizes and ids
Since efe4ef2029f the CMS_UPDATER overloads are fixed-width. On LP64
long == int64_t so callers passing long still compiled; on ILP32 long
matches no overload and the i386 build fails (260 errors, all in
libnml). Use explicit int64_t at the affected declarations.
No functional change on 64-bit. Side effect: the NML encoded header
layout no longer depends on the width of long.
commit 49774b45bbbd5892d5f0641580c640d4547632df
Merge: cd41211f b308b833
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 19:20:03 2026 +0900
Merge pull request #4617 from grandixximo/hal-print-arch-clean
hal: print 64-bit values and pointers without long long casts
commit cd41211f58f5a67fdd20ceaa4513bd9ae77f198a
Merge: a7e0a636 72e5d4a1
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 19:17:19 2026 +0900
Merge pull request #4612 from grandixximo/qtvcp-excepthook-tbnone
qtvcp: ignore traceback-less exceptions in excepthook
commit a7e0a636fe20af5c7648e29098dc0caf1c1cd388
Merge: 6c300638 83b53682
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 19:07:32 2026 +0900
Merge pull request #4658 from grandixximo/tool-mmap-poll-retry
emcmodule: retry the tool mmap attach in stat.poll()
commit 6c300638fdb2863ec376c49c59e25136aab75e9a
Merge: fbae6548 f4e3d938
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 19:02:01 2026 +0900
Merge pull request #4640 from maxheise/pyvcp-spinbox-reset-button
pyvcp: add an optional reset button to the spinbox widget
commit fbae6548b67073cbdad4c2686456e0fd21101810
Merge: 62b971fe 777aacf2
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:57:57 2026 +0900
Merge pull request #4631 from grandixximo/axis-jog-unhomed-182
motion: per-axis homed check for teleop jog soft limits
commit 62b971fea06bc2b08fbe23f78993d0761159e3eb
Merge: 2af2d908 f1f75d8d
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:54:14 2026 +0900
Merge pull request #4629 from grandixximo/home-final-no-delay
homing: drop the dead HOME_DELAY timer in HOME_FINAL_MOVE_START
commit 2af2d908f84b85bde968e23ac58566ca38cbc71d
Merge: ecdb6c09 7e8a9eff
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:49:52 2026 +0900
Merge pull request #4624 from SyncTwin/synctwin/m62-m68-out-of-range-error
motion: make M62-M68 on a non-existent output an error
commit ecdb6c09f73ae83fc456f3a877fa376110a1bb4a
Merge: 56ac1b64 fe62f564
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:46:49 2026 +0900
Merge pull request #4620 from grandixximo/glnav-2093
glnav: avoid divide-by-zero in set_eyepoint_from_extents
commit 56ac1b64a016ef605600c2a470349163186aef09
Merge: 85f75dfd 9106761a
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:40:34 2026 +0900
Merge pull request #4600 from grandixximo/twp-plane
interp: the tilted work plane, G68.2, G68.4 and G69
commit 85f75dfde4314e83d695a8522f6136de8e9e35a4
Merge: d6372e66 cdbf2339
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:34:50 2026 +0900
Merge pull request #4595 from grandixximo/switchkins-unify
switchkins: one dispatch for kinematics modules, halcompile components and out-of-tree modules
commit d6372e66e541be980142e982c658766896ae30f7
Merge: bd9732fc daaab403
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:30:06 2026 +0900
Merge pull request #4594 from grandixximo/axis-type-gui
GUIs and preview: an axis converts by its [AXIS_<letter>] TYPE
commit bd9732fc10fe6c7b92779baf13de29370a32a648
Merge: e8a02761 e93dfa51
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 18:27:59 2026 +0900
Merge pull request #4586 from grandixximo/pumakins-4585
pumakins: keep joints 4 and 6 within a half turn of the previous value
commit e8a02761ceaf0a01add0e0b090e9cf4402c3f748
Merge: 6fa6e06d 19d59b25
Author: Rene Hopf <renehopf@mac.com>
Date: Sun Oct 11 11:21:09 2026 +0200
Merge pull request #4518 from rene-dev/time-float
change time pins to float
commit 9ed4ebcf8236a101f61f5a7efd3c12e0620ed731
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 10:53:36 2026 +1100
motion: ramp a jog down to a lowered speed on the S-curve planner
A continuous jog asked again at a lower speed while it runs, as halui
does when its jog-speed pin changes while a jog pin is held, dropped to
the new speed in one servo cycle on the S-curve planner: the ramp toward
max_vel was computed, then the speed was clamped to max_vel anyway.
From 80 to 10 mm/s that is 70000 mm/s^2 against an 800 limit, on a
joint jog and on a world jog alike. The trapezoid planner ramps.
Clamp only while the speed is within max_vel; above it the ramp brings
it down within the acceleration and jerk limits.
tests/jog-speed-change samples every servo cycle of both jogs on both
planners.
commit 6fa6e06d13ac3cb7577437a76499782e4b7aac1d
Merge: b63d0670 af6b5b75
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sun Oct 11 07:16:54 2026 +0900
Merge pull request #3971 from grandixximo/fix/3650-queue-not-empty-probe
task: tighten AUTO read-ahead wait-clear to match MDI (#3650)
commit a950fb55e85680cd5208297c7da991963b0e400f
Author: Hannes Diethelm <hannes.diethelm@gmail.com>
Date: Wed Aug 26 23:13:58 2026 +0200
cppcheck fixes for ubuntu-26.04
Replace #ifdef AAAAA with #if 0 so cppcheck does not check unused code.
"make headers" before cppckeck, so include is populated.
commit 80803f28b7c44c948b783a3fd42455785ab28aa7
Merge: 3f582d0f 75007a11
Author: Greg Carl <26096779+snowgoer540@users.noreply.github.com>
Date: Sat Oct 10 09:49:22 2026 -0400
Merge pull request #4657 from snowgoer540/gregc/highlight
qtplasmac: fix button highlight didn't update on color changes
commit f6eadeb2941b6d27b8c27f690ceb471bb3b48352
Author: yurc <yurik.x@gmail.com>
Date: Sat Oct 10 14:45:08 2026 +0300
hal: quote the function name in the hal_del_init_funct_from_thread() error
commit 04cd92b0d1ee5027dc9b1b3e3bdc78c061a943e3
Author: yurc <yurik.x@gmail.com>
Date: Sat Oct 10 14:45:08 2026 +0300
halcmd: unloadrt names the error when an init entry is not removed
commit 738c4efbcebcb9f53ef86a560048ec0bcd6fa8a9
Author: yurc <yurik.x@gmail.com>
Date: Sat Oct 10 14:45:08 2026 +0300
hal: hal_del_init_funct_from_thread() returns -EALREADY like its counterpart
commit 990d9817a9a9b3d16279be9d922d71ed6699a567
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 10 19:45:14 2026 +1100
tests: drop sudo from the test suite and the package CI job
Tests that installed a component with `${SUDO} halcompile --install`
now use plain halcompile and an executable skip file, so they run on RIP
and skip against installed packages. Remove SUDO, the control file
handling and -u from runtests, and sudo from the package-arch job.
commit cde9d4ee0165b3b019c338d77ced666048c90c7d
Author: yurc <yurik.x@gmail.com>
Date: Sat Oct 10 06:44:16 2026 +0300
tests/hal-delf-live: the victim sleeps inside its function
delfvictim held the thread inside its function for 500 periods in a
busy loop. When delftest.py and halcmd ran on the CPU of the realtime
thread (no isolcpus, RTAPI_CPU_NUMBER on a shared CPU), they did not
run during the hold: v.inside was never seen and the test failed with
"no progress in 10 s", and delf could not run while the thread was
inside.
The function now waits in rtapi_delay(), which sleeps in uspace, so
the CPU is free while the thread is inside and delf runs during the
hold in every CPU layout. Without the wait in delf the test still
fails ("delf returned while the thread was inside v"), now also when
all processes share one CPU.
commit f1c6bbd4a51cbcc4000b6314cedf5a0cccc5e13f
Author: yurc <yurik.x@gmail.com>
Date: Sat Oct 10 06:29:46 2026 +0300
hal: document hal_del_init_funct_from_thread(), -ENOENT like its counterpart
The new function is described on the hal_init_funct_to_thread(3) page,
the way hal_del_funct_from_thread() shares the hal_add_funct_to_thread(3)
page, and is listed in components.adoc. A function or thread that does
not exist returns -ENOENT, as in hal_init_funct_to_thread(), so the
return values on the shared page hold for both.
commit 9d639ea00652872e1659c2094c0fb0c9cb4174f9
Author: yurc <yurik.x@gmail.com>
Date: Sat Oct 10 06:22:59 2026 +0300
halcmd: unloadrt removes the component's init entries first, one query record
hal_del_init_funct_from_thread() removes one entry of a function from a
thread's init list. The realtime thread walks and drains that list
without the mutex once the threads run, so it is changed only while the
threads are stopped and the init cycle has not run; otherwise it returns
-EBUSY.
unloadrt_delf() collects the init entries and the cyclic entries of the
component in two vectors and removes the init entries first. If that
fails, the threads were started meanwhile and the component is not
unloaded. One HalQRec is reused for both queries with clear().
delftest.hal unloads a component with an init entry before start.
commit daaab4032ac8cf94ae0f3c6dbebd89cb1484f89c
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Sep 24 19:35:47 2026 +1000
emcsh, linuxcncrsh: axis values by [AXIS_<letter>] TYPE
The Tcl interface converted each value by its axis letter, and
linuxcncrsh converted all nine offsets as lengths. shcom's
convertAxisUnits() converts by type.
commit bac0d0037a49f4821f112c1c5dfc36deed29dfe5
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Sep 24 19:35:47 2026 +1000
gladevcp, gmoccapy, touchy, gscreen, pyui: units and jogging by TYPE
The DRO and offset widgets, and the jog rates and increments of
hal_glib, gmoccapy, touchy, gscreen and pyui, picked the angles by letter
or index. They follow [AXIS_<letter>] TYPE now. gmoccapy no longer scales
an angular jog by the display units, and the offset page no longer skips
the G30 row where it meant to skip the angles.
commit 90047048b859784582c1c9b5b0ce2807ca5647d0
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Sep 24 19:35:47 2026 +1000
qtvcp: units and jogging by [AXIS_<letter>] TYPE
iniinfo's conversion vectors, the actions, the action button, the DRO,
the tool table and the screens' keyboard jog took A B C as the angles.
They now follow the type through INFO.AXIS_ANGULAR and INFO.is_angular(),
and kb_jog() works out for itself whether its target is an angle.
commit 97b4328c8c9f61647429e2a45aca645e8805440d
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Sep 24 19:35:47 2026 +1000
axis: touch off and jogging by [AXIS_<letter>] TYPE
Touch off, the teleop jog velocity and its maximum, and the jog step size
now follow the type instead of the letter. The step size loop also used a
stale index.
commit 31e48408576e985ea7fce0c6581d256831c77302
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Thu Sep 24 19:35:47 2026 +1000
preview: an axis converts by its [AXIS_<letter>] TYPE
The preview canon and the DROs of AXIS, gremlin and qtvcp's graphics took
A B C as the angles by index, so an ANGULAR V was drawn and shown divided
by 25.4 and a LINEAR A was not converted.
lib/python/axis_kinds.py is the Python side of src/emc/ini/axis_kinds.hh.
gcode.parse reads the kinds from the INI and converts only the lengths.
glcanon's DRO conversion and its 0..360 wrap follow them.
tests/interp/preview-axis-type checks what the preview canon is handed.
commit 83b536826b12a571e203444c3cb1d9581391fad6
Author: Luca Toniolo <10792599+grandixximo@users.noreply.github.com>
Date: Sat Oct 10 09:27:11 2026 +1100
emcmodule: retry the tool mmap attach in stat.poll()
The first stat.poll() in a process tried tool_mmap_user() once. If task
had not created ~/.tool.mmap yet, a static flag latched and every later
poll() returned NULL without setting an exception, so Python raised
SystemError forever and a new linuxcnc.stat() did not help. A stale
~/.tool.mmap from an earlier run hid it; isolated test runs and a fresh
HOME failed every time.
Retry the attach on each poll until it succeeds and leave initialized at
0 meanwhile, so tool_table and toolinfo report no data instead of
touching a NULL mapping. poll() warns once, and says when the mmap
became available, so the warning does not read as a failure (hdiethelm
asked for that after hunting the cause in CI logs).
tool_mmap_user() warns once and names the file and the step that
failed: open or fstat with the errno, or a file still shorter than the
mapping. The creator truncates before extending, and mapping the file in
that window would SIGBUS on first access, so a short file counts as
absent. BsAtHome asked for the reason and the size_t comparison.
Drop the drive.py comment that described the SystemError as normal
startup noise.
Fixes #4656
commit 985d03feafac7062e6122a80031a32bccb7d8603
Author: yurc <yurik.x@gmail.com>
Date: Fri Oct 9 20:29:23 2026 +0300
halcmd: unloadrt_delf() messages in the style of the other list errors
The error messages drop the function-name prefix, like the message of
do_unloadrt_cmd() for hal_list_comp(). The comment says that the entries
removed before a failed delf stay removed.
commit 5fdeffe077298e3e4ca78752ff8eea83cf6f4c2e
Author: yurc <yurik.x@gmail.com>
Date: Fri Oct 9 20:20:10 2026 +0300
halcmd: unloadrt delfs the component's functions instead of a hal_lib check
hal_comp_check_unload() is removed. halcmd finds the component's
functions with hal_list_funct() and their threads with hal_list_thread()
(HAL_QTYPE_THREAD_FUNCT) and delfs each entry before unloading, so
unloadrt waits for a running thread like delf does and does not unload
when a delf fails. Init entries are left to the unload. With the config
locked, unloadrt works as before.
The test now runs unloadrt without delf while the thread is held inside
the function.
commit 3f582d0f8fa31c8fc8ecfeef3526df6deb74d662
Merge: 60dd807b 45f9e0ce
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Oct 9 15:48:14 2026 +0200
Merge pull request #4622 from SyncTwin/synctwin/check-ini-e-option
linuxcnc_check_ini: make -e/--error work
commit 60dd807b6c652cccc2065c69d4efa16ab5fcbe76
Merge: 376e24ad 3624a45d
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Oct 9 15:47:30 2026 +0200
Merge pull request #4637 from grandixximo/bldc-4625-comp-guard
halcompile: allocate fake params for personality-masked params
commit 376e24adf3be0b6da4af8c2b63321a10960fcb49
Merge: 8f05c9d4 db154c41
Author: BsAtHome <bertho@vagrearg.org>
Date: Fri Oct 9 15:43:16 2026 +0200
Merge pull request #4654 from BsAtHome/fix_fc44-include-order
emcmodule: Reorder include to prevent duplicate define error
commit 371d7925c43a916f760f32889ccdb8421dd62d36
Author: Rimas <rimasjspy@gmail.com>
Date: Thu Oct 8 21:16:32 2026 +0500
tp: make helix curvature independent of arc subdivision
commit db154c41b595967400416ef0b4f5d3f28900dd72
Author: Bertho Stultiens <bertho@vagrearg.org>
Date: Thu Oct 8 16:55:30 2026 +0200
emcmodule: Reorder include to prevent duplicate define error
commit 8f05c9d47b3c97c2aaed37aedfbc60b58d41e02c
Merge: 46a388fd 0a1ef870
Author: andypugh <andy@bodgesoc.org>
Date: Thu Oct 8 00:20:32 2026 +0100
Merge pull request #4641 from LinuxCNC/andypugh/PR4519_followup
Update MDI helpers for new D word in G33 and G76.