On 21/12/2022 11:37, Marc Weustink via fpc-devel wrote:
On 20-12-2022 21:12, Sven Barth via fpc-devel wrote:
So the only logical solution is to stop the offending thread from
executing or not to have it call InitThread() while the
initialization section of the System unit is still running. The
former might have unintended consequences (e.g. not being able to
debug the unit initialization) while the later might work in most
cases as long as that remote thread doesn't need to execute code that
relies on InitThread().
The latter may be the best solution. Skip any rtl call when a thread
attaches during initialization. In normal cases this will only be
triggered when a debugger attaches. It usually only forces a
breakpoint, so no fully initialized rtl is needed.
Ondrey
When you got the issue, did you:
- Use FpDebug?
- Lazarus 2.3
- Run/Debug - But *not* press the "pause" button?
Because if so, the debugger should not have sent any DebugBreak.
Unless Windows itself injects threads, if an exe is started with
"poDebugProcess".
So maybe something else is injecting threads... And the reason it
happens (to be observed) only in the debugger is that the timing changes.
Ondrey, if the above (FpDebug, not pressed "pause") applies, can you
test the following:
Modify the system unit, and in the "initialization" section, insert some
"sleep(250);" between statements (downto after InitSystemThreads)
Then run without debugger.
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel