Re: Interrupting long external library calls

From: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
To: Mark Cave-Ayland <mark(dot)cave-ayland(at)ilande(dot)co(dot)uk>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Interrupting long external library calls
Date: 2012-05-16 10:39:05
Message-ID: 4FB383C9.30402@enterprisedb.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 16.05.2012 13:25, Mark Cave-Ayland wrote:
> One of the issues we've been looking at with PostGIS is how to interrupt
> long-running processing tasks in external libraries, particularly GEOS.
> After a few tests here, it seems that even the existing SIGALRM handler
> doesn't get called if statement_timeout is reached when in an external
> library, e.g. with PostgreSQL 9.0/PostGIS 2.0 trunk/GEOS:

If you interrupt an external library call, it might leave memory in an
inconsistent state, or some other such thing. It's not generally safe to
interrupt arbitrary 3rd party code.

However, if you're absolutely positively sure that the library function
can tolerate that, you can set "ImmediateInterruptOK = true" before
calling it. See e.g PGSemaphoreLock() on how that's done before starting
to sleep on a semapgore.

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Mark Cave-Ayland 2012-05-16 11:30:25 Re: Interrupting long external library calls
Previous Message Mark Cave-Ayland 2012-05-16 10:25:20 Interrupting long external library calls