Skip to content

fix: deliver poller events with MakeCallback - #239

Open
Azq2 wants to merge 1 commit into
serialport:mainfrom
siemens-mobile-hacks:fix/poller-makecallback
Open

fix: deliver poller events with MakeCallback#239
Azq2 wants to merge 1 commit into
serialport:mainfrom
siemens-mobile-hacks:fix/poller-makecallback

Conversation

@Azq2

@Azq2Azq2 commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Fix native poller callbacks to use MakeCallback, so promise continuations scheduled by readable events run immediately instead of waiting for a later event-loop tick.

Example of bug:

 serialport/bindings-cpp/unixRead readable fired! +11ms <--- debug inside readable()
serialport/bindings-cpp/unixRead Starting read +10s <--- await readable() is delayed until external setTimeout(() => { /* noop */ }, 10000) finished

I saw this problem when EAGAIN happens.

@Nerivec

Copy link
Copy Markdown
Contributor

@reconbot might this be the fix for serialport/node-serialport#3148 (or at least part of it)?
We're starting to see issues popup a bit everywhere about Node >=26.4 & serialport 😁

Source appears to be nodejs/node#62969

CC: @AlCalzone@Koenkk

@AlCalzone

Copy link
Copy Markdown

I can confirm that this fixes the issue for me.

@DragonWork

Copy link
Copy Markdown

@reconbot 👀

Woodii1998 added a commit to zhouxiyu1997/friendmaker that referenced this pull request Aug 19, 2026
* fix(serial): parse ACKs mixed with ESP-IDF logs and unblock Linux reads
- strip ANSI color codes and recognize ESP-IDF log lines
(e.g. 'W (4652) BT_HCI: ...') so ACKs polluted by device logs parse
correctly instead of being treated as malformed and triggering retry/reset
- when an ACK line is mixed with an embedded device log line, re-parse the
ACK portion before dropping the line so the ACK is never lost
- patch @serialport/bindings-cpp unix-read with a 50ms poller fallback:
on Linux the poller readable event can be missed (shared uv_poll,
overriding registration), leaving serial data stranded in the fd for
2-6s until the next device output arrives; the fallback re-tries fs.read
so data is always read within 50ms
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(serial): align poller patch with upstream MakeCallback fix
- apply serialport/bindings-cpp#239 to deliver poller callbacks immediately
- keep the patch-package override on the native poller source
- strip complete common ANSI escape sequences before ACK parsing
- preserve ESP-IDF log recognition and mixed-line ACK recovery
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(serial): recover ACKs glued after device logs and dedupe ACK handling
Recognizing ESP-IDF log lines made sanitizeDeviceLine keep mixed
log-before-ACK lines intact, which skipped the old tail-ACK fallback and
dropped those ACKs as plain device logs. Extract a trailing sequenced
ACK from device log lines in waitForAck, forward the leading log
segment, and route both mixed-line paths through a shared
handleSequencedAck helper. Cover the line sanitizing and mixed-line ACK
recovery with unit tests.
Co-authored-by: Woodii <Woodii1998@users.noreply.github.com>
* chore: minimize package-lock diff to patch-package additions
Rebase the lockfile on main and merge in only the patch-package
dependency closure, dropping the unrelated peer/optional flag churn
introduced by regenerating the whole lockfile with a different npm
version.
Co-authored-by: Woodii <Woodii1998@users.noreply.github.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Woodii <Woodii1998@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Azq2@Nerivec@AlCalzone@DragonWork