Handling signals in D

Basile B b2.temp at gmx.com
Wed Dec 26 09:35:30 UTC 2018


On Wednesday, 26 December 2018 at 03:19:45 UTC, Norbert Preining 
wrote:
> Hello everyone,
> we are writing a program that synchronizes the OneDrive cloud 
> service with the local computer, and run it as daemon in the 
> background. To ensure proper database shutdown on exit, we need 
> to install signal handlers that react to SIGINT etc.
>
> [...]
> 
> Now, unfortunately the call to the shutdown procedure is not 
> possible in `@nogc`, so I am a bit at loss how to deal with all 
> this.
>
> The code I am using is:
> ```
> extern(C) @nogc @system void exitHandler(int value) {
>        printf("Ooohhhh got %d\n", value);
>        // workaround for segfault in 
> std.net.curl.Curl.shutdown() on exit
>        oneDrive.http.shutdown();
>        exit(0);
> }
> ```
> and in `main` before entering the loop:
> ```
> signal(SIGINT, &exitHandler);
> ```
>
> Any suggestion would be very much appreciated.
>
> Norbert

The technique to use here is to wrap the non-gc code in a 
delegate, cast it as a @nogc delegate and call it, see [1] for 
more details.

[1] https://p0nce.github.io/d-idioms/#Bypassing-@nogc


More information about the Digitalmars-d-learn mailing list