Replying to myself to resend to the list, since my previous attempt seems to have been eaten by a grue.
On Mon, Apr 29, 2019 at 1:59 PM Robert Haas <robertmh...@gmail.com> wrote: > > On Fri, Apr 26, 2019 at 2:58 PM Souvik Bhattacherjee <kivu...@gmail.com> > wrote: > > I have created a shared hash table in partitioned mode inside the postgres > > server code. In order to guard the partitions, I'm trying to initialize an > > array of LWLocks. The code that I'm trying to use for that is > > > > void RequestNamedLWLockTranche(const char *tranche_name, int num_lwlocks); > > LWLockPadded *GetNamedLWLockTranche(const char *tranche_name); > > > > I'm not sure where exactly should this code be called from the server code. > > So I had placed it in > > > > void CreateSharedMemoryAndSemaphores(bool makePrivate, int port); > > > > within ipic.c. However, I'm getting the following error message when > > starting the database: > > > > FATAL: requested tranche is not registered > > > > So at this point, I'm a little confused as to where the methods should be > > called from inside the server code. Any pointers would be appreciated. > > RequestNamedLWLockTranche() changes the behavior of LWLockShmemSize() > and CreateLWLocks(), so must be called before either of those. > GetNamedLWLockTranche() must be called after CreateLWLocks(). > > This machinery works for pg_stat_statements, so see that as an example > of how to make this work from an extension. If you're hacking the > core server code, then look at the places where the corresponding bits > of pg_stat_statements code get called. IIRC, _PG_init() gets called > from process_shared_preload_libraries(), so you might look at the > placement of the calls to that function. > > -- > Robert Haas > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company