Re: SysV IPC message queues

From: Kyle Hubert
Date: Mon Mar 22 2010 - 04:46:29 EST


OK, so the Linux kernel implementation does syscalls for SysV IPC
message queues, hence the lack of freeing resources when IPC_PRIVATE
is used. If IPC_PRIVATE is used, can't we open a file descriptor for
the user process, and it's file operation on close would just call
freequeue?

Thanks,

-Kyle Hubert

On Sun, Mar 21, 2010 at 7:28 PM, Kyle Hubert <khubert@xxxxxxxxx> wrote:
> Hi, I recently found myself using SysV IPC message queues in a Linux
> specific application. However, I have one concern, I'm using
> IPC_PRIVATE for the key to instantiate the message queue (then doing
> pthread_creates with the open file descriptor accessed from children
> threads).
>
> Anyways, upon reception of signals, the message queue lingers around
> taking up memory. I wouldn't mind this if I was using a key_t which I
> could use to reopen the message queue at a later instantiation.
> However, IPC_PRIVATE just grabs an available queue, and I don't have
> access to the key, so I can't exactly open and remove it later. It's
> my opinion that IPC_PRIVATE should cause the message queue to get
> destroyed when all the open file descriptors are closed, not solely
> when msgctl is used to remove it. Also, I don't want to capture
> signals, since that's a slippery slope and SIGKILL will still leak
> message queues. I also don't think ipcs/ipcrm are long term solutions,
> since I'm handing the library off as an abstraction.
>
> Would it be worth it to generate a patch to the Linux kernel to add
> this functionality? Or, is there an undocumented ioctl I can call to
> set that feature on?
>
> IE: IPC_PRIVATE message queues should be freed when ref count drops to zero.
>
> Thank you very much for your time,
>
> -Kyle Hubert
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/