Commit Graph
1261 Commits
Author SHA1 Message Date
Michael Davidsaver 5ab17ec375 re-write CLI argument parsing for testability 2026-06-28 11:47:57 -07:00
Michael Davidsaver 8cb8d4bf69 pvxput handle JSON
disable CLI for 3.15
2026-06-28 11:47:57 -07:00
Michael Davidsaver 2b99e3c6ee JSON parsing
YAJL Added in Base 3.15

Omit when building with 3.14
2026-06-28 11:47:57 -07:00
Michael Davidsaver 23420900bd data: allow omission of leading -> for union access 2026-06-28 11:47:57 -07:00
Michael Davidsaver 182b336b58 Revert "gha: ABI check against older Base"
This reverts commit 731fb27f13.
2026-06-26 18:05:52 -07:00
Michael Davidsaver 0b54cc108d doc 2026-06-23 21:45:26 -07:00
Michael Davidsaver 8e00eaecde 1.5.2 1.5.2 2026-06-23 21:40:09 -07:00
Michael Davidsaver e2796b8f70 minor 2026-06-23 19:15:49 -07:00
Michael Davidsaver 97407cd11e client: fix Op early destruction
Errors resulting in early Op destruction would erroneously
be escalated to "Not in running evbase worker" exceptions.
Something has already gone wrong, but this would mask the
root cause.
2026-06-23 15:39:50 -07:00
Michael Davidsaver 007ba4e000 1.5.2a1 2026-06-04 08:09:06 -07:00
Michael Davidsaver f4b41ed3a3 doc 2026-06-03 17:02:49 -07:00
Joao Paulo Martins 26961de931 Fix for PVA links to set UTAG/userTag when link is set with TIME=-2
Added test case for PVA link with 'time:true' and checked if cached timestamp and userTag/UTAG are propagated

Convert snap_tag to uint32_t to avoid sign extension. Modified test case
to cover this scenario.
2026-06-03 16:26:48 -07:00
Michael Davidsaver bf90ac6bec test: i32 -> u64 cast
Does sign extension as internal storage is i64.
2026-06-03 16:24:17 -07:00
Michael Davidsaver 1f353aab42 doc 2026-06-03 16:23:17 -07:00
Michael Davidsaver cff1cc185e GHA update 2026-06-03 16:23:17 -07:00
Sang Woo Kim 5c18e10ccf client: reject a MONITOR data message before the INIT reply
Move validation cross-check earlier to avoid possible deref of
NULL RequestFL.

handle_MONITOR() decoded the message payload before validating it against
the operation state.  The data branch takes Guard G(info->fl->lock), but
info->fl stays null until the INIT reply has been processed, so a peer
that has acknowledged CREATE_CHANNEL -- the op then sits in opByIOID with
state==Creating and fl==nullptr -- could send a MONITOR data message
before the INIT reply and dereference the null free-list, a
remote-triggerable client crash.

Move the operation-state validation (handle.lock(), op==CMD_MONITOR, and
the subcmd-vs-state check) ahead of the payload-decode block.  A data
message in the Creating state now faults the buffer and the connection is
dropped before any access to info->fl, so "payload is decoded only after
a successful INIT" holds by construction rather than by a trailing check.
2026-06-01 17:11:28 -07:00
Sang Woo Kim 1679799691 codec: bound value-decode recursion to prevent stack overflow
Apply recursion limit to decoding

Adds a testxcode regression that decodes a long run of 0x82 and asserts
the decode faults instead of recursing without bound.
2026-06-01 17:11:28 -07:00
Michael Davidsaver 731fb27f13 gha: ABI check against older Base
... prior to change fixing bug allowing silent
failure of .d rules.
2026-06-01 17:11:28 -07:00
Michael Davidsaver b568e93eb1 doc 2026-05-24 15:12:54 -07:00
Michael Davidsaver 80a83c4ace doc: discuss GDB and stack traces 2026-05-24 15:08:08 -07:00
Michael Davidsaver abce868dbb cpy3.8 build ml2010, drop 3.13t
Switch source build to 3.14 (not t)
2026-05-24 14:41:43 -07:00
Michael Davidsaver 5353b02a33 ioc: fix single PUT with 'record[block=true, process=true]'
No point to wait for processing, when none will occur.
However, wait as requested when Unset or True.

Somewhere between 409b432dd96b65e8c69d35fe8810081b8ff87a0a
and 93e4d3eef3
the sense of this test was lost.
2026-05-24 14:41:43 -07:00
Sang Woo Kim 7ae3ca84c0 client, server: interpret monitor ackAny percentage as a fraction
A "N%" ackAny was computed as percent*queueSize on the client and
percent*limit on the server, without dividing by 100, then clamped to
the queue size.  Any percentage >= 1% therefore saturated to the full
queue, so ackAny="50%" behaved as 100% and defeated percentage-style
ack control.

Divide the clamped percent by 100 on both the client (clientmon.cpp)
and server (servermon.cpp) parsing paths.

Note: this changes the negotiated ack threshold for existing
percentage ackAny requests.
2026-05-24 14:13:25 -07:00
Sang Woo Kim e5ec952e1d server: report monitor squash count in MonitorStat::nSquash
ServerMonitorControl::stats() assigned mon->nSquash to stat.nQueue,
overwriting the queue depth set just above, and never assigned
stat.nSquash.  Callers of MonitorControlOp::stats() therefore could
not observe the real unsent-queue depth once squashing had occurred,
and never received the squash count in its documented field.

Assign mon->nSquash to stat.nSquash.
2026-05-24 14:13:25 -07:00
Sang Woo Kim de3fb5d915 qsrv: pvaLink getTimeStampTag return remote timeStamp.userTag
pvaLink cached the remote timeStamp.userTag in fld_usertag but never
assigned snap_tag from it (pvalink.h initialises snap_tag to 0 and no
code path updated it), so pvaGetTimeStampTag() always returned 0.
Records reading a user tag through a PVA link lost that metadata.

Assign snap_tag from fld_usertag in the same snapshot block that
derives snap_time from fld_seconds/fld_nanoseconds, defaulting to 0
when the field is absent.
2026-05-24 14:13:25 -07:00
Michael Davidsaver bf571f6eb2 test: check that UTAG is propagated by pvalink 2026-05-24 14:13:25 -07:00
Sang Woo Kim 07c2de1548 qsrv: pvaLink onTypeChange must clear fld_seconds
Add fld_seconds to the clear-list (replacing the duplicate fld_severity).
2026-05-24 14:13:25 -07:00
Sang Woo Kim 33798897fb qsrv: SecurityLogger must restore dbChannel addr.pfield
Missing initialization of SecurityLogger::pchan
prevents restore logic from triggering.

Remove default value so that compiler complains if used
without initialization.
2026-05-24 14:13:25 -07:00
Sang Woo Kim 4f45ffab44 test non-atomic group get must read channel-less Const fields
Add testConstNonAtomicGet(): a non-atomic get of the tst:const group
asserts s.i/s.d/s.s == 14/1.5/"hello". Fails before the fix (all defaults),
passes after.
2026-05-24 14:13:25 -07:00
Michael Davidsaver 46f8c53114 ioc: put fix permissions with non-atomic group
... containing const/structure mappings
2026-05-24 14:13:25 -07:00
Sang Woo Kim 0eebeb8d79 fix(qgroup): non-atomic group get must read channel-less Const fields
A non-atomic group get (record[atomic=false]) gated each field read on
`pDbChannel && leafNode`, so fields with no dbChannel were silently
skipped. MappingInfo::Const fields carry a constant value rather than a
channel, so a non-atomic get returned them at their cloneEmpty() defaults
(0 / 0.0 / ""), while the atomic get and monitor paths return the constant.

Mirror the atomic branch's field selection in the non-atomic branch: skip
only Proc/Structure and read every other field, taking the per-field
DBLocker only when a channel is present. getGroupField() already handles
channel-less fields via field.info, so Const fields populate correctly.
2026-05-24 14:13:25 -07:00
Michael Davidsaver 5b5ce4b28f test: testConst() not atomic 2026-05-24 14:13:25 -07:00
Michael Davidsaver 825a8c2ae7 client: RequestFL lock during dtor
pacify valgrind over what is likely a false positive
2026-05-24 14:13:25 -07:00
Michael Davidsaver 7ab3ef0576 client: minor optimization
Don't need to hold RequestFL lock when cloning prototype
2026-05-24 14:13:25 -07:00
Michael Davidsaver 485ff0a9da quiet DRD error reports
testget

Complaint is of race between wait and Context cleanup.
shared_ptr<info_t> probably makes this safe, but
no down-side to explicit shutdown.
2026-05-24 14:13:25 -07:00
Michael Davidsaver 781a96e110 client: query user/host name once on Context creation 2026-05-24 14:13:25 -07:00
Michael Davidsaver 1f7e1b0fab server: minor optimization 2026-05-24 14:13:25 -07:00
Michael Davidsaver 3c0154b413 ioc: avoid enumerating roles for each PUT
Just once on first PUT to each Channel
2026-05-24 14:13:25 -07:00
Michael Davidsaver 78596286d2 ioc: localize local function declarations 2026-05-23 17:16:02 -07:00
Michael Davidsaver 054b3f28c8 server: remove redundant extra bind handling
Made redundant by preceding 'continue' condition
added with 266ee52704
2026-05-23 17:16:02 -07:00
Michael Davidsaver f8d6192983 server: monitor TX check buffer level on each iteration
PVXS EPICS / Native Linux with 3.14 (push) Failing after 1s
PVXS EPICS / Native Linux with 3.15 (push) Failing after 1s
PVXS EPICS / Native Linux with clang ubsan (push) Failing after 1s
PVXS EPICS / Native Linux with clang (push) Failing after 1s
PVXS EPICS / Native Linux (libc++ debug) (push) Failing after 1s
PVXS EPICS / Native Linux (WError) (push) Failing after 1s
PVXS EPICS / Native Linux (c++17) (push) Failing after 1s
PVXS EPICS / Native Linux with libevent stable (push) Failing after 1s
PVXS EPICS / Cross mingw64 DLL (push) Failing after 1s
PVXS EPICS / Cross mingw64 static (push) Failing after 1s
PVXS EPICS / Native Linux with 7.0.2 (push) Failing after 1s
PVXS EPICS / Linux CentOS 7 (push) Failing after 10s
GH pages / generate (push) Failing after 1s
Python / pycp27-cp27m manylinux1_x86_64 (push) Failing after 2s
Spell Check / Spell Check (push) Successful in 8s
PVXS EPICS / Linux fedora latest (push) Failing after 9s
Python / pycp37-cp37m manylinux2010_x86_64 (push) Failing after 1s
Python / pycp310-cp310 manylinux2014_x86_64 (push) Failing after 1s
Python / pycp311-cp311 manylinux2014_x86_64 (push) Failing after 1s
Python / pycp312-cp312 manylinux2014_x86_64 (push) Failing after 1s
Python / pycp313-cp313 manylinux2014_x86_64 (push) Failing after 1s
Python / pycp313-cp313t manylinux2014_x86_64 (push) Failing after 1s
Python / py3.10 win_amd64 (push) Failing after 55s
Python / pycp38-cp38 manylinux2014_x86_64 (push) Failing after 1s
Python / pycp39-cp39 manylinux2014_x86_64 (push) Failing after 1s
Python / py3.11 win_amd64 (push) Failing after 7s
Python / pycp314-cp314 manylinux_2_28_x86_64 (push) Failing after 1s
Python / pycp314-cp314t manylinux_2_28_x86_64 (push) Failing after 1s
GH pages / publish (push) Skipped
Python / py3.12 win_amd64 (push) Failing after 6s
Python / py3.13 win_amd64 (push) Failing after 6s
Python / py3.14 win_amd64 (push) Failing after 5s
Python / py3.8 win_amd64 (push) Failing after 4s
Release artifacts / artifacts (push) Failing after 2m32s
PVXS EPICS / OSX (push) Cancelled after 0s
PVXS EPICS / RTEMS5 (push) Cancelled after 0s
PVXS EPICS / vs2022 DLL (push) Cancelled after 0s
PVXS EPICS / vs2022 static (push) Cancelled after 0s
Python / py3.11 macosx_11_0_universal2 (push) Cancelled after 0s
Python / py3.10 macosx_11_0_universal2 (push) Cancelled after 0s
Python / py3.12 macosx_11_0_universal2 (push) Cancelled after 0s
Python / py3.13 macosx_11_0_universal2 (push) Cancelled after 0s
Python / py3.14 macosx_11_0_universal2 (push) Cancelled after 0s
Python / py3.8 macosx_11_0_universal2 (push) Cancelled after 0s
Python / py3.9 macosx_11_0_universal2 (push) Cancelled after 0s
Python / combine (push) Cancelled after 0s
2026-05-16 17:55:40 -07:00
Andrew Johnson 3d854e492c Run our cfg/CONFIG files when INSTALL_LOCATION set 2026-04-20 04:30:53 -07:00
Jure Varlec 1d481d5be1 doc: show how to create arrays of NTScalar 2026-04-02 07:25:44 -07:00
Michael Davidsaver 6f7942e4af doc 2026-02-27 08:19:09 +00:00
Michael Davidsaver 9d448164fa testpvalink: more parser coverage 2026-02-27 08:16:23 +00:00
Michael Davidsaver 484960a1b8 test helpers use posix regex on RTEMS
GCC circa RTEMS 4.9 and 5 seems to crash with some regular expressions.
2026-02-27 08:16:23 +00:00
Michael Davidsaver 3a777e1022 shared_array: mark additional methods noexcept 2026-02-27 08:16:23 +00:00
Michael Davidsaver 5ee956d047 default for Source::List::dynamic 2026-02-27 08:16:23 +00:00
Michael Davidsaver 52186e3587 test cancel of PUT 2026-02-27 08:16:23 +00:00
Michael Davidsaver 1e9a22f9a4 test ackAny 2026-02-27 08:16:23 +00:00