| From: | tgl(at)postgresql(dot)org (Tom Lane) | 
|---|---|
| To: | pgsql-committers(at)postgresql(dot)org | 
| Subject: | pgsql: Fix LISTEN/NOTIFY race condition reported by Laurent Birtz, by | 
| Date: | 2008-03-12 20:12:48 | 
| Message-ID: | [email protected] | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-committers | 
Log Message:
-----------
Fix LISTEN/NOTIFY race condition reported by Laurent Birtz, by postponing
pg_listener modifications commanded by LISTEN and UNLISTEN until the end
of the current transaction.  This allows us to hold the ExclusiveLock on
pg_listener until after commit, with no greater risk of deadlock than there
was before.  Aside from fixing the race condition, this gets rid of a
truly ugly kludge that was there before, namely having to ignore
HeapTupleBeingUpdated failures during NOTIFY.  There is a small potential
incompatibility, which is that if a transaction issues LISTEN or UNLISTEN
and then looks into pg_listener before committing, it won't see any resulting
row insertion or deletion, where before it would have.  It seems unlikely
that anyone would be depending on that, though.
Tags:
----
REL7_4_STABLE
Modified Files:
--------------
    pgsql/src/backend/commands:
        async.c (r1.102.2.2 -> r1.102.2.3)
        (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/async.c?r1=1.102.2.2&r2=1.102.2.3)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Bruce Momjian | 2008-03-12 20:19:46 | pgsql: Add to TODO: > * Expire published xmin for read-only and idle | 
| Previous Message | Tom Lane | 2008-03-12 20:12:39 | pgsql: Fix LISTEN/NOTIFY race condition reported by Laurent Birtz, by |