[M3devel] thread calls on non-modula3 threads, win32 vs. posix

Jay K jay.krell at cornell.edu
Sun Sep 26 15:51:22 CEST 2010


What is supposed to happen if you call into Modula-3 code on a non-Modula-3 thread?

 - Jay

----------------------------------------
> From: hosking at cs.purdue.edu
> Date: Sun, 26 Sep 2010 09:13:09 -0400
> To: jay.krell at cornell.edu
> CC: m3devel at elegosoft.com
> Subject: Re: [M3devel] thread calls on non-modula3 threads, win32 vs. posix
>
> Why does a native thread need M3-supported thread locals? The idea is to keep native and M3 threads separate, right?
>
> On 26 Sep 2010, at 08:21, Jay K wrote:
>
> >
> > I think it is problematic in both.
> > If I understand you.
> >
> >
> > The thread locals could be allocated on-demand which might
> > address some situations. Though that can also fail.
> >
> >
> > A reasonable seeming place to allocate thread locals is m3core.DllMain(thread attach).
> > That even allows you to fail (due to low memory).
> > However that doesn't work as well as one might hope.
> > In particular, any number of threads can be created before a particular .dll is loaded.
> > And a .dll can be unloaded while the threads still exist -- making also thread detach
> > not so ideal for freeing. What you have to do is:
> > - be willing to allocate on demand
> > - have some story for failure
> > - track all the thread locals through a global (!) and free them in thread/process detach
> > (but note that there are two .dll unload scenarios: FreeLibrary and ExitProcess;
> > there is a parameter that distinguishes them; best to do nothing, quickly in
> > the ExitProcess).
> >
> >
> > Best really really really really best to avoid thread locals.
> > But that is probably impossible.
> >
> >
> > Cygwin does wacky stuff where it puts its thread locals at the top of the stack.
> > Which doesn't solve the problems.
> >
> >
> > - Jay
> >
> > ----------------------------------------
> >> From: hosking at cs.purdue.edu
> >> Date: Sat, 25 Sep 2010 10:32:21 -0400
> >> To: jay.krell at cornell.edu
> >> CC: m3devel at elegosoft.com
> >> Subject: Re: [M3devel] thread calls on non-modula3 threads, win32 vs. posix
> >>
> >> Is it ok in the WIn32 implementation for the thread to be native.
> >> I think it is ok for pthread.
> >>
> >> On 25 Sep 2010, at 05:35, Jay K wrote:
> >>
> >>>
> >>> PROCEDURE AlertWait (m: Mutex; c: Condition) RAISES {Alerted} =
> >>> (* LL = m *)
> >>> VAR self := GetActivation();
> >>> BEGIN
> >>> IF DEBUG THEN ThreadDebug.AlertWait(m, c); END;
> >>> IF self = NIL THEN Die(ThisLine(), "AlertWait called from non-Modula-3 thread") END;
> >>> XWait(m, c, self, alertable := TRUE);
> >>> END AlertWait;
> >>>
> >>>
> >>> The pthread code doesn't have the check for NIL and call to Die.
> >>> Nor for that matter, the uses of ThreadDebug -- which I added.
> >>>
> >>> I think these should be more similar.
> >>>
> >>> What I was really wondering about, again, is more common code between Win32 and Posix
> >>> in the thread code...
> >>>
> >>> - Jay
> >>>
> >>
> >
>
 		 	   		  


More information about the M3devel mailing list