This Week in D: Issue #4

Jeremy DeHaan via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Tue Feb 3 09:39:35 PST 2015


On Tuesday, 3 February 2015 at 14:36:58 UTC, Adam D. Ruppe wrote:
> On Tuesday, 3 February 2015 at 05:53:30 UTC, Jeremy DeHaan 
> wrote:
>> Yes, they are not guaranteed to run, but isn't that only 
>> during run time? They are going to be called at the 
>> application exit to ensure everything is cleaned up.
>
> If the application exits somewhat cleanly (through return from 
> main or even a thrown exception in D), it will run, though I'm 
> not sure if that's guaranteed or just an implementation 
> convenience.
>
> However, if the application exits differently, they won't 
> necessarily be run. For example, a Unix signal terminating the 
> process skips all the D cleanup tasks.
>
> Often, this doesn't matter because the operating system will 
> clean up a lot of resources anyway. But if you are using 
> something like shared memory with another process, or expect a 
> file to be written to in a destructor, you'll find those things 
> never happen.
>
> I had this problem once in simpledisplay.d. When it died by 
> ctrl+c, the unix SIGINT was sent, and that skipped the 
> destructors for shared images. As a result, the system 
> eventually ran out of shared handles and most GUI programs 
> wouldn't start up anymore until I cleaned it up some other way.

Yikes, that's good to know.

Still, I feel like it could be worded a little better in the docs
and anywhere else they are talked about. I feel like it is just
far too ambiguous.


More information about the Digitalmars-d-announce mailing list