Thread: dynamic loading of .so

dynamic loading of .so

From
TJ O'Donnell
Date:
I have begun to use some static variables in my c-language
functions to maintain state (3rd party licensing issues) during
the course of a session (postgres process, spawned by postmaster).
These are declared static outside the scope of any function.
(is global the correct term anymore?)
When I use dynamic loading of my .so,
each session is independent, with its own static variables.
Will the same be true if I were to load the .so once when
the database starts up?  Or will there be just one set of
static variables for all sessions?

TJ

Re: dynamic loading of .so

From
Douglas McNaught
Date:
TJ O'Donnell <tjo@acm.org> writes:

> I have begun to use some static variables in my c-language
> functions to maintain state (3rd party licensing issues) during
> the course of a session (postgres process, spawned by postmaster).
> These are declared static outside the scope of any function.
> (is global the correct term anymore?)
> When I use dynamic loading of my .so,
> each session is independent, with its own static variables.
> Will the same be true if I were to load the .so once when
> the database starts up?  Or will there be just one set of
> static variables for all sessions?

Each backend process has its own memory space, so the variables will
still be independent.

-Doug

Re: dynamic loading of .so

From
Date:
are there any way to make them global for all the instances?

On 10/14/2005, "Douglas McNaught" <doug@mcnaught.org> wrote:

>TJ O'Donnell <tjo@acm.org> writes:
>
>> I have begun to use some static variables in my c-language
>> functions to maintain state (3rd party licensing issues) during
>> the course of a session (postgres process, spawned by postmaster).
>> These are declared static outside the scope of any function.
>> (is global the correct term anymore?)
>> When I use dynamic loading of my .so,
>> each session is independent, with its own static variables.
>> Will the same be true if I were to load the .so once when
>> the database starts up?  Or will there be just one set of
>> static variables for all sessions?
>
>Each backend process has its own memory space, so the variables will
>still be independent.
>
>-Doug
>
>---------------------------(end of broadcast)---------------------------
>TIP 2: Don't 'kill -9' the postmaster

Re: dynamic loading of .so

From
Douglas McNaught
Date:
<cristian@clickdiario.com> writes:

> are there any way to make them global for all the instances?

Put them in shared memory.  This probably isn't trival, as all the
shared memory is allocated up front and used for existing purposes (at
least, as I understand it).

I guess you could always allocate your own shmem segment, but managing
it (and making sure it goes away when the backend exits) would be a
pain.

-Doug

Re: dynamic loading of .so

From
Tom Lane
Date:
Douglas McNaught <doug@mcnaught.org> writes:
> <cristian@clickdiario.com> writes:
>> are there any way to make them global for all the instances?

> Put them in shared memory.  This probably isn't trival, as all the
> shared memory is allocated up front and used for existing purposes (at
> least, as I understand it).

There's a "slop factor" of 100KB or so in the shared memory size
calculation, which means that an add-on library that requests space soon
enough could probably get away with allocating up to a few KB without
causing any problems.  (The slop is not totally useless, since for
instance the lock manager might eat it up if more locks get requested
than expected.)

In the long run it might be interesting to add hooks that allow
preloaded libraries to contribute to the shmem sizing calculation and
then to snarf up the space they've requested before it can get eaten by
the lockmgr.

            regards, tom lane

Re: dynamic loading of .so

From
"Cristian Prieto"
Date:
You are talking about a shmem block using by the backend, right? Or about my
"own" shmem block?. I'm very interested in the implementation of a
"constants" like functionality to pgsql, but I don't know where to start
with... Any help or ideas?

-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Domingo, 16 de Octubre de 2005 10:42 p.m.
To: Douglas McNaught
Cc: cristian@clickdiario.com; tjo@acm.org; pgsql-general@postgresql.org
Subject: Re: [GENERAL] dynamic loading of .so

Douglas McNaught <doug@mcnaught.org> writes:
> <cristian@clickdiario.com> writes:
>> are there any way to make them global for all the instances?

> Put them in shared memory.  This probably isn't trival, as all the
> shared memory is allocated up front and used for existing purposes (at
> least, as I understand it).

There's a "slop factor" of 100KB or so in the shared memory size
calculation, which means that an add-on library that requests space soon
enough could probably get away with allocating up to a few KB without
causing any problems.  (The slop is not totally useless, since for
instance the lock manager might eat it up if more locks get requested
than expected.)

In the long run it might be interesting to add hooks that allow
preloaded libraries to contribute to the shmem sizing calculation and
then to snarf up the space they've requested before it can get eaten by
the lockmgr.

            regards, tom lane