Re: logical replication launcher crash on buildfarm

Robert Haas <robertmhaas@gmail.com>

From: Robert Haas <robertmhaas@gmail.com>
To: Petr Jelinek <petr.jelinek@2ndquadrant.com>
Cc: Andres Freund <andres@anarazel.de>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, Petr Jelinek <petr@2ndquadrant.com>, Peter Eisentraut <peter_e@gmx.net>
Date: 2017-04-05T14:09:26Z
Lists: pgsql-hackers
On Tue, Apr 4, 2017 at 2:08 PM, Petr Jelinek
<petr.jelinek@2ndquadrant.com> wrote:
> So this is what I came up with on plane. Generalized the loading
> functionality into load_library_function which that can load either
> known postgres functions or call load_external_function.
>
> I am not quite sure if fmgr.c is best place to put it, but I didn't want
> to include stuff from executor in bgworker.c. I was thinking about
> putting it to dfmgr.c (as that's where load_external_function) but again
> seemed weird to including executor there.
>
> As with previous patch, 9.6 will need quite different patch as we need
> to keep compatibility there, but since I am traveling I think it's
> better to share what I have so far.

- * Register a new background worker while processing shared_preload_libraries.
+ * Register a new static background worker.
  *
- * This can only be called in the _PG_init function of a module library
- * that's loaded by shared_preload_libraries; otherwise it has no effect.
+ * This can only be called directly from postmaster or in the _PG_init
+ * function of a module library that's loaded by shared_preload_libraries;
+ * otherwise it will have no effect.

This does seem to need updating, but that's a somewhat separate issue
from fixing the problem at issue.

+         * Serialize extension entrypoint information. It's unsafe to pass
+         * function pointers across parallel processes as the function pointer
+         * may be different in new process in EXEC_BACKEND builds so we
+         * always pass library and function name.

The word "extension" should be removed.

This basically looks OK otherwise, but we'll need something else for 9.6.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


Commits

  1. Avoid passing function pointers across process boundaries.

  2. Don't use bgw_main even to specify in-core bgworker entrypoints.