You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@apr.apache.org by Luke Kenneth Casson Leighton <lk...@samba-tng.org> on 2001/07/17 15:26:29 UTC
DCEthreads - cancellation / mutexes is possible
hiya,
well, in amongst all this about threads etc. i just wanted
to let you know that i happened across the context_app
example in the dce 1.22 codebase. it is an example
client and server that maintains a context - a persistent
connection across multiple remote function calls.
this implies that if the connection dies without the client
destroying the context, then the server must do it _for_
you [by calling context_name_t_rundown which you *have* to
provide: it calls it on every outstanding context of type
'context_name_t' it is an auto-generated function.]
and that means killing a thread.
and _that_ implies thread cancellation and cleanups.
and it works.
therefore, i conclude that the dce/rpc codebase has successfully
implemented thread cancellation in their POSIX/Draft4 thread
library.
additionally, the context app, being threaded, has to have
locking on the little 'stores' it maintains. i do not know
what it means [well, okay, i do, but i've never actually
programmed with threads is more like it] but there is some
code in there that mentions 'mutex'.
i presume that this is working, too.
does this help answer your question, justin?
luke
p.s. the little 'stores' above - explanation: the demo is
to create an in-memory 'store', and to be able to do
file-like i/o (read, write, seek) on it. it's actually
a static array of memory blocks, so they have to do mutex
around it.
Re: DCEthreads - cancellation / mutexes is possible
Posted by dean gaudet <de...@arctic.org>.
On Tue, 17 Jul 2001, Justin Erenkrantz wrote:
> And, from what I can tell, Dean Gaudet has mentioned this morning that
> he is willing to veto async notification. Dean, would that include
> cancellation of threads? I have a suspicion it might. Dean has
> commit access on httpd as well, so if you can convince Dean to
> change his mind, I'll change mine. -- justin
cancellation is a subset of notification :)
-dean
Re: DCEthreads - cancellation / mutexes is possible
Posted by Justin Erenkrantz <je...@ebuilt.com>.
On Tue, Jul 17, 2001 at 03:26:29PM +0200, Luke Kenneth Casson Leighton wrote:
> therefore, i conclude that the dce/rpc codebase has successfully
> implemented thread cancellation in their POSIX/Draft4 thread
> library.
>
> additionally, the context app, being threaded, has to have
> locking on the little 'stores' it maintains. i do not know
> what it means [well, okay, i do, but i've never actually
> programmed with threads is more like it] but there is some
> code in there that mentions 'mutex'.
>
> i presume that this is working, too.
>
> does this help answer your question, justin?
I don't like cancellation of threads from a design perspective. I don't
care much that some test "works." It wasn't an issue of whether the
underlying OS supports cancellation of threads - it was an issue that
this now becomes a nightmare to code up correctly. We now need to add
cancellation points, and there are certain activities that the thread
may enter which are non-cancellable no matter what we do (i.e. mutex
acquisition). AIUI, the dce/rpc codebase is a commercial *user-space*
threading add-on. Yuck. -1 on dce/rpc for that aspect alone.
-1 on having cancellation of threads based on the overall design. I
abhor the idea of a thread being forced to exit against its wishes.
It will just lead us down a road that I don't wish to go down in APR.
Now, if someone wants to write a httpd MPM that uses cancellation,
be my guest. I can't stop you (I don't have commit access there and
hence veto power). In fact, before even considering cancellation
support in APR, I'd want to see a MPM that uses cancellation properly
and is just as robust (hehe) as the current threading MPM. When that
occurs, I might be willing to reconsider.
And, from what I can tell, Dean Gaudet has mentioned this morning that
he is willing to veto async notification. Dean, would that include
cancellation of threads? I have a suspicion it might. Dean has
commit access on httpd as well, so if you can convince Dean to
change his mind, I'll change mine. -- justin
Re: DCEthreads - cancellation / mutexes is possible
Posted by Luke Kenneth Casson Leighton <lk...@samba-tng.org>.
On Tue, Jul 17, 2001 at 04:05:20PM -0700, dean gaudet wrote:
>
>
> On Tue, 17 Jul 2001, Luke Kenneth Casson Leighton wrote:
>
> > therefore, i conclude that the dce/rpc codebase has successfully
> > implemented thread cancellation in their POSIX/Draft4 thread
> > library.
>
> yes cancellation is in the spec. i've never denied that. the problem is
> libraries and code over which we have no control.
hiya dean,
i mentioned earlier that people might like to go over that codebase
[not with a fine-tooth-comb!] to review the techniques used, there,
rather than to actually use the code.
e.g. they have TRY / THROW / EXCEPT / CATCH macros that are
used _really_ extensively throughout the code, and i suspect
that these are a possible reason why MSVC++ adopted these macros
quite so early on [ms reimplemented a wire-compatible and
almost-api-compatible DCE/RPC]
> there's a thread FAQ somewhere which talks about async notification.
ack!
Re: DCEthreads - cancellation / mutexes is possible
Posted by Luke Kenneth Casson Leighton <lk...@samba-tng.org>.
On Tue, Jul 17, 2001 at 06:49:20AM -0700, rbb@covalent.net wrote:
>
> > well, in amongst all this about threads etc. i just wanted
> > to let you know that i happened across the context_app
> > example in the dce 1.22 codebase. it is an example
> > client and server that maintains a context - a persistent
> > connection across multiple remote function calls.
> >
> > this implies that if the connection dies without the client
> > destroying the context, then the server must do it _for_
> > you [by calling context_name_t_rundown which you *have* to
> > provide: it calls it on every outstanding context of type
> > 'context_name_t' it is an auto-generated function.]
> >
> > and that means killing a thread.
> >
> > and _that_ implies thread cancellation and cleanups.
> >
> > and it works.
> >
> > therefore, i conclude that the dce/rpc codebase has successfully
> > implemented thread cancellation in their POSIX/Draft4 thread
> > library.
>
> That is quite a leap in logic there.
okay, so i'm a rutherford instead of an einstein
[rutherford was known for knowing what the answer was,
and then cooking the books to get the missing steps
between the question and the correct answer :) :)
iow, i know that dce threads have cancellation. like
sander says, this is pretty hard-core code used in
things like the National Insurance Database, military
and government-mandated applications etc., so...
> I can think of multiple ways that
> the thread itself could timeout and kill itself. You also haven't
> mentioned how much memory was leaked by killing that thread. I am not
> saying you are wrong, just that with the information you provided above, I
> am not convinced that they have actually successfully implemented async
> killing of threads.
okay. i tried a little test.
just before freeing the context, i instead call exit(0).
i presume that this is a Bad Thing To Do? there is even
a client thread so i presume doing this sort of thing
is Not Good.
then i do this:
while 1; do ./context_client 'test message'; done;
now, this generates about... difficult to tell, the screen
scrolls so quickly... 50 clients per second, at a guess?
i left it for about a minute, and then examined the server apps
[there are 10 threads forked off]. the memory usage did NOT
change / go up.
... just tried it again [2 mins]: *giggle*. oh dearie me:
The Open Group is going to be so pissed :) memory usage went up
from 1584 to 1608 and now the server isn't accepting connections any more.
teehee :)
[... ah, no: it's recovered again. hey, this is just plain odd.
okay, could just be i'm overloading my computer :) ]
yep: been running on-and-off for several minutes: ps auxw shows
no obvious memory leaks. if you know a better way than ps axuw
please let me know!
luke
Re: DCEthreads - cancellation / mutexes is possible
Posted by dean gaudet <de...@arctic.org>.
On Tue, 17 Jul 2001, Luke Kenneth Casson Leighton wrote:
> therefore, i conclude that the dce/rpc codebase has successfully
> implemented thread cancellation in their POSIX/Draft4 thread
> library.
yes cancellation is in the spec. i've never denied that. the problem is
libraries and code over which we have no control. there's a thread FAQ
somewhere which talks about async notification.
-dean
Re: DCEthreads - cancellation / mutexes is possible
Posted by rb...@covalent.net.
> well, in amongst all this about threads etc. i just wanted
> to let you know that i happened across the context_app
> example in the dce 1.22 codebase. it is an example
> client and server that maintains a context - a persistent
> connection across multiple remote function calls.
>
> this implies that if the connection dies without the client
> destroying the context, then the server must do it _for_
> you [by calling context_name_t_rundown which you *have* to
> provide: it calls it on every outstanding context of type
> 'context_name_t' it is an auto-generated function.]
>
> and that means killing a thread.
>
> and _that_ implies thread cancellation and cleanups.
>
> and it works.
>
> therefore, i conclude that the dce/rpc codebase has successfully
> implemented thread cancellation in their POSIX/Draft4 thread
> library.
That is quite a leap in logic there. I can think of multiple ways that
the thread itself could timeout and kill itself. You also haven't
mentioned how much memory was leaked by killing that thread. I am not
saying you are wrong, just that with the information you provided above, I
am not convinced that they have actually successfully implemented async
killing of threads.
Ryan
_____________________________________________________________________________
Ryan Bloom rbb@apache.org
Covalent Technologies rbb@covalent.net
-----------------------------------------------------------------------------