Skip to content

Stack thread - #5398

Open
graydon wants to merge 6 commits into
stellar:masterfrom
graydon:stack-thread
Open

Stack thread#5398
graydon wants to merge 6 commits into
stellar:masterfrom
graydon:stack-thread

Conversation

@graydon

@graydon graydon commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

This adds a new StackThread type that works like std::thread but takes a stack size as first argument. It then uses that in BatchExecutor with an 8MiB stack. The point here is just to avoid worker-thread stack size variability across platforms, which we've seen from time to time in the past.

Copilot AI review requested due to automatic review settings July 30, 2026 21:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a cross-platform StackThread abstraction with configurable stack sizes and uses it to standardize BatchExecutor worker stacks at 8 MiB.

Changes:

  • Implements thread lifecycle, naming, IDs, and native handles.
  • Migrates BatchExecutor workers from std::thread.
  • Adds StackThread unit tests.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

File Description
src/util/StackThread.h Implements the configurable-stack thread abstraction.
src/util/test/StackThreadTests.cpp Tests thread API behavior and Linux stack sizing.
src/util/BatchExecutor.h Changes worker storage to StackThread.
src/util/BatchExecutor.cpp Creates workers with 8 MiB stacks.
Comments suppressed due to low confidence (1)

src/util/StackThread.h:546

  • pthread_create may run the trampoline before returning, while mThread, mJoinable, and mId are assigned only afterward. A callable that captures the StackThread under construction can observe or race with those writes, unlike std::thread's constructor synchronization guarantee. Gate payload->run() on a startup barrier that is released only after all object state has been published.
        rc = ::pthread_create(&tid, &attr, &detail::trampoline, payload.get());

Comment thread src/util/StackThread.h Outdated
Comment thread src/util/StackThread.h Outdated
Comment thread src/util/StackThread.h Outdated
Comment thread src/util/StackThread.h Outdated
Comment thread src/util/BatchExecutor.cpp Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants