I am a bit confused about the "correct" way to use the shared memory
functions in the APR library, namely, how do I create/open a shared memory
segment on the "first" process, and have subsequent processes use the same
shared memory area.
If I do a apr_shm_create and pass a NULL filename, APR uses the following
call (Unix) to open the shared memory segment:
shmget(IPC_PRIVATE, new_m->realsize,SHM_R | SHM_W | IPC_CREAT)
This will create and open an unnamed segment. Since there is no reference
in the code to anything getting key of the segment, I don't believe there
is any mechanism here to allow another process to attach to this - unless
of course I am missing something.
If I do an apr_shm_create call and pass a filename, APR tries to do an
exclisuve file create on this filname, failing and returning an error if
the file already exists. Therefore, the first caller can use this to
create and open the shm, but subsequent callers cannot.
I would assume that subsequent callers could use apr_shm_attach to then
attach to an existing shared memory segment, however, it appears that this
function is not used anywhere in the apache (2.2) code base whatsoever.
(It is used in one or two places in 2.3).
So aside from the fact that I don't understand how this works as all as
implemented - even in places where it is used and obviously works, like
the scoreboard - what is the "correct" way to actually do this?