From: Poul-Erik Andreasen <poulerik@pea.dk>
Subject: Re: Advice on abort
Date: Tue, 08 Nov 2005 17:59:41 +0100
Date: 2005-11-08T17:59:41+01:00 [thread overview]
Message-ID: <4370d97d$0$141$edfadb0f@dread11.news.tele.dk> (raw)
In-Reply-To: <1ozi307fng5fi$.1ms3kyzc7defi$.dlg@40tude.net>
Dmitry A. Kazakov wrote:
> On Tue, 08 Nov 2005 15:54:45 +0100, Poul-Erik Andreasen wrote:
>
>
>>Dmitry A. Kazakov wrote:
>>
>>>On 7 Nov 2005 09:09:53 -0800, REH wrote:
>>>
>>>
>>>>Poul-Erik Andreasen wrote:
>>>>
>>>>
>>>>>REH wrote:
>>>>>
>>>>>
>>>>>>What are the best options when a task needs to be terminated, but
>>>>>>signaling the task may not be possible? We have tasks that sometimes
>>>>>>need to be terminated, but may potentially be blocked on a resource,
>>>>>>such as a socket. Currently we use OS-specific calls to terminate the
>>>>>>task, but I've never liked that. I've been thinking of using the abort
>>>>>>statement, but I don't think that's very graceful either. I also would
>>>>>>rather not complicate the code (or force polling behavior) by making
>>>>>>the sockets non-blocking. Any advice?
>>>>>>
>>>>>
>>>>>One poosibillty is too use asyncronius transfer of control. Somthing
>>>>>like this.
>>>>>
>>>>>select
>>>>> call.foo_entry -- this i is a guarded entry in a protected
>>>>>object or -- another task
>>>>> -- her can you have anything yuo may need to clean up after the abort
>>>>>then abort
>>>>> listen_to_socket this is the function wich may be blocked
>>>>>end select
>>>>>
>>>>>Thee foo_entry basicly dosen't need to do anything. an you have onother
>>>>>procedure or entry to open it.
>>>>
>>>>I was once advised never to use ATC because it is very slow. Is this
>>>>true? It was in reference to GNAT.
>>>
>>>That is not the main concern. The problem is the state in which aborting
>>>would leave the socket and the corresponding port.
>
>
>>I am not that good at sockets, So i vould like to know wich problematic
>>(uncleanable) states wee are taking about.
>
>
> It all depends on the particular implementation of the socket library and
> how Ada tasks are mapped to system threads and processes. All sorts of
> resource leaks are thinkable. For example, you might be unable to listen
> that TCP/IP port until process restart or it won't abort etc.
The time of the abortion are at the end of the first part of the
ACT so a cant se how the following could make any problems.
select
call.foo_entry -- this i is a guarded entry in a protected object
or
Abort_select
close_socket
--this is the time of the abortion
then abort
listen_to_socket this is the function wich may be blocked
end select
-- check here if socket realy are closed;
>>>Note also that what you want to do is not an Ada issue at all. Actually you
>>>don't want to abort any Ada task. What you want is to cancel an OS
>>>operation blocking some Ada task. This can be done *only* by means of the
>>>OS being under consideration. There are little choices:
>>>
>>>1. Asynchronous I/O without blocking
>>>
>>>2. Synchronous I/O with some cancel operation invoked from outside (like
>>>closing socket, or Abort_Selection proposed by Marc Criley)
>>
>>This will however require that the sockets or select are made public in
>>some way, wich a dont like.
>
>
> Not necessarily. It seems natural to decouple A) the higher level protocol
> [encapsulates a task] from B) the communication object [likely passive,
> encapsulates socket, COM port etc].
>
> type B is abstract new Root_Stream_Type with ... -- Abortable streams
> procedure Abort is abstract;
>
> type Socket_Stream is new B with private ...;
> type COM_Stream is new B with private ...;
>
> type A (Stream : access B'Class) is ...;
> procedure Abort (X : in out A);
> private
> type A ... record
> Reader : Some_Task_Ptr;
> end record;
>
> procedure Abort (X : in out A) is
> begin
> Abort (X.Stream); -- Aborts I/O
> Free (Reader); -- Terminates the task
> end Abort;
>
> With Ada 2005 interfaces one could even avoid mix-ins.
Well, instead of exporting them you import them into the task from the
beginning. I am not saying that it is impossible to make an incapsulation.
PEA
next prev parent reply other threads:[~2005-11-08 16:59 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-04 15:25 Advice on abort REH
2005-11-04 17:15 ` Marc A. Criley
2005-11-04 18:21 ` Dmitry A. Kazakov
2005-11-04 18:35 ` REH
2005-11-05 18:33 ` Simon Wright
2005-11-05 21:23 ` REH
2005-11-06 11:17 ` Simon Wright
2005-11-06 13:58 ` REH
2005-11-06 20:08 ` Simon Wright
2005-11-06 20:41 ` REH
2005-11-07 14:55 ` Poul-Erik Andreasen
2005-11-07 17:09 ` REH
2005-11-07 18:03 ` Dmitry A. Kazakov
2005-11-08 14:54 ` Poul-Erik Andreasen
2005-11-08 16:14 ` Dmitry A. Kazakov
2005-11-08 16:42 ` Marc A. Criley
2005-11-08 16:59 ` Poul-Erik Andreasen [this message]
2005-11-08 20:05 ` Dmitry A. Kazakov
2005-11-09 14:12 ` Poul-Erik Andreasen
2005-11-09 17:14 ` Dmitry A. Kazakov
2005-11-08 16:32 ` Marc A. Criley
2005-11-08 14:35 ` Poul-Erik Andreasen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox