Strange bug in std.concurrency.spawn
Nick Treleaven
nospam at example.net
Thu Apr 7 08:10:31 PDT 2011
On Tue, 05 Apr 2011 01:19:08 -0300, Jose Armando Garcia wrote:
> dmd can compile and run to follow the code:
>
> unittest
> {
> spawn(&fun);
> }
>
> void fun(int i) { writeln(i); }
>
> Which if you are lucky segfaults and if you are unlucky prints garbage!
> The problem is that spawn doesn't checks that the signature of fun
> matches the number and type of variadic arguments. Is this a bug in
> spawn(), a bug in dmd or a limitation of the language?
>
> * If it is a bug in spawn, how can it be augmented to check this case? *
> If this is a bug in dmd, I'll file a report. * If this is a limitation
> of the language is this well known and it is worked on? As it stands it
> doesn't seem possible to write safe multi-threaded code.
It's not a language limitation. The signature is:
Tid spawn(T...)( void function(T) fn, T args );
So the compiler should ensure that fn(args) is typesafe.
Please search bugzilla for this bug and report it if not found.
More information about the Digitalmars-d-learn
mailing list