comp.lang.ada
 help / color / mirror / Atom feed
From: tonyg <tonythegair@gmail.com>
Subject: Re: task abortion
Date: Thu, 26 Jan 2012 01:12:56 -0800 (PST)
Date: 2012-01-26T01:12:56-08:00	[thread overview]
Message-ID: <94aa02cf-ccd3-4a08-999a-2bbe562f5bef@q8g2000yqa.googlegroups.com> (raw)
In-Reply-To: 19pfl6kbf35z6.1ao0njyuiqbls.dlg@40tude.net

On Jan 25, 10:43 am, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
wrote:
> On Wed, 25 Jan 2012 02:11:55 -0800 (PST), tonyg wrote:
> > I want to be able to abort a task if it has not responded for a while,
> > and then start a new one in its stead.
>
> > I have a pointer going to the concerned task.
>
> > Each task has a 'stop accept' in its rendezvous which forces it out of
> > its loop so that it ends, but if the task has frozen for some reason
> > then I want to abort.
>
> What are you going to achieve by that?
>
> Consider the scenarios:
>
> 1. The task crashed, it is already terminated then.
>
> 2. The task is looping somewhere:
>
> 2.a. What about the resources it owns? Local resources are usually freed
> when the task is aborted. But if you have some globally allocated memory,
> semaphores etc, they all get lost unless freed by some local controlled
> objects, "holders" releasing the resources upon finalization, as they leave
> the scope upon task abort. Now:
>
> 2.b. What if the task is frozen in an abort-deferred thing? Finalization is
> such a thing. Abort-deferred stuff cannot be aborted. Note that system I/O
> is most likely non-abortable. I.e. you would not be able to abort
> Ada.Text_IO.Get_Line or recv on a socket etc anyway.
>
> All in one, aborting tasks doing complex stuff is not likely to work in a
> reasonable way. Aborting tasks doing simple stuff is not needed, such tasks
> impose no problems anyway. Ergo, it is not likely you would need to abort
> any task.
>
> If you decided for aborting, you would have to redesign almost everything
> and in an extremely careful way in order to make tasks logically abortable.
> That means to make continuation possible and meaningful after aborting some
> tasks. Now a guess: making the tasks right and thus preventing a need
> aborting them, would probably be far less efforts...
>
> --
> Regards,
> Dmitry A. Kazakovhttp://www.dmitry-kazakov.de

Since I wrote my message I have discovered the package
Ada.Task_Identification. I totally agree with your argument on not
having them fail in the first place. My strategy should be then not to
abort :), I'm going to use that package just to monitor my tasks and
see if any freeze for some IO reason. Thanks for the advice.




  reply	other threads:[~2012-01-26  9:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-25 10:11 task abortion tonyg
2012-01-25 10:43 ` Dmitry A. Kazakov
2012-01-26  9:12   ` tonyg [this message]
2012-01-26 16:47     ` Anh Vo
2012-01-31 13:25       ` tonyg
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox