Bug 19265 – Multiple calls to rt_init/rt_term leads to SIGILL in _d_initMonoTime

Status
NEW
Severity
normal
Priority
P3
Component
druntime
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2018-09-25T20:43:55Z
Last change time
2024-12-07T13:38:39Z
Assigned to
No Owner
Creator
Tomáš Chaloupka
Moved to GitHub: dmd#17171 →

Comments

Comment #0 by chalucha — 2018-09-25T20:43:55Z
I'm playing with fork() with druntime initialized after the fork, but I found that I can't call rt_init/rt_term to cleanup the runtime multiple times. Simple test case: extern extern(C) int _d_run_main(int, char**, void*); extern (C) int rt_init(); extern (C) int rt_term(); extern(C) int main(int argc, char** argv) { auto res = _d_run_main(argc, argv, &testmain); res = _d_run_main(argc, argv, &testmain); return res; } int testmain(string[] args) { return 1; } Backtrace: #0 0x00000000004327af in _d_initMonoTime () #1 0x000000000042a553 in rt_init () #2 0x0000000000427c50 in rt.dmain2._d_run_main(int, char**, extern(C) int(char[][]) function).runAll() () #3 0x0000000000427be8 in rt.dmain2._d_run_main(int, char**, extern(C) int(char[][]) function).tryExec(scope void() delegate) () #4 0x0000000000427b50 in _d_run_main () #5 0x0000000000427896 in main () Is this the expected behavior? I guess that the problem is at least here: https://github.com/dlang/druntime/blob/8fd52019826259dc92ab712f4b37a3f0ea4d8265/src/core/time.d#L2514 Tried with dmd-2.082.0
Comment #1 by chalucha — 2018-09-25T20:46:19Z
Other test case: extern extern(C) int _d_run_main(int, char**, void*); extern (C) int rt_init(); extern (C) int rt_term(); extern(C) int main(int argc, char** argv) { rt_init(); rt_term(); rt_init(); // SIGILL rt_term(); return 0; }
Comment #2 by robert.schadek — 2024-12-07T13:38:39Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/17171 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB