[Pacemaker] [libqb]Unlink of files bound to sockets

Grüninger, Andreas (LGL Extern) Andreas.Grueninger at lgl.bwl.de
Thu Dec 18 12:30:46 EST 2014


I used the current trunk.
I could not find the unlink calls.

If domain sockets are used this two methods are used.

In ./lib/ipc_socket.c 
static void
qb_ipcc_us_disconnect(struct qb_ipcc_connection *c)
{
  munmap(c->request.u.us.shared_data, SHM_CONTROL_SIZE);
  unlink(c->request.u.us.shared_file_name);
  qb_ipcc_us_sock_close(c->event.u.us.sock);
  qb_ipcc_us_sock_close(c->request.u.us.sock);
  qb_ipcc_us_sock_close(c->setup.u.us.sock);
}

In ./lib/ipc_setup.c
void
qb_ipcc_us_sock_close(int32_t sock)
{
shutdown(sock, SHUT_RDWR);
close(sock);
}

I added in the latter the unlink calls.

-----Ursprüngliche Nachricht-----
Von: David Vossel [mailto:dvossel at redhat.com] 
Gesendet: Donnerstag, 18. Dezember 2014 18:13
An: The Pacemaker cluster resource manager
Betreff: Re: [Pacemaker] [libqb]Unlink of files bound to sockets



----- Original Message -----
> 
> 
> I sent yesterday this email to the mailing list of libq 
> 'quarterback-devel at lists.fedorahosted.org'.
> 
> But there is nearly no activity since august.

i saw the email. i flagged it so it would get a response.

> 
> I use the current trunk of libqb.
> 
> In qb_ipcc_us_sock_close nd qb_ipcs_us_withdraw of lib/ipc_setup.c 
> sockets are closed.
> 
> Is there a reason why the files bound to the sockets are not deleted 
> with unlink?
> 
> Is unlinking not necessary with Linux?

Unlinking is required for linux.

For client/server connections.

qb_ipcc_us_disconnect unlinks on the client side.
qb_ipcs_us_disconnect unlinks on the server side.


> I found thousands of files in statedir=/var/corosync/run after a while.

What version of corosync are you using? There were some reference leaks for ipc connections in the corosync code we fixed a year or so ago that should have fixed this.

-- David

> 
> 
> I tried this and it seems to work without errors.
> 
> 
> 
> e.g.
> 
> void
> 
> qb_ipcc_us_sock_close(int32_t sock)
> 
> {
> 
> #ifdef QB_SOLARIS
> 
> struct sockaddr_un un_addr;
> 
> socklen_t un_addr_len = sizeof(struct sockaddr_un);
> 
> #endif
> 
> shutdown(sock, SHUT_RDWR);
> 
> #ifdef QB_SOLARIS
> 
> if (getsockname(sock, (struct sockaddr *)&un_addr, &un_addr_len) == 0) 
> {
> 
> if(strstr(un_addr.sun_path,"-") != NULL) {
> 
> qb_util_log(LOG_DEBUG, "un_addr.sun_path=%s", un_addr.sun_path);
> 
> unlink(un_addr.sun_path);
> 
> }
> 
> } else {
> 
> qb_util_log(LOG_DEBUG, "getsockname returned errno=%d", errno);
> 
> }
> 
> #endif
> 
> close(sock);
> 
> }
> 
> 
> 
> Regards
> 
> 
> 
> Andreas
> 
> _______________________________________________
> Pacemaker mailing list: Pacemaker at oss.clusterlabs.org 
> http://oss.clusterlabs.org/mailman/listinfo/pacemaker
> 
> Project Home: http://www.clusterlabs.org Getting started: 
> http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
> Bugs: http://bugs.clusterlabs.org
> 

_______________________________________________
Pacemaker mailing list: Pacemaker at oss.clusterlabs.org http://oss.clusterlabs.org/mailman/listinfo/pacemaker

Project Home: http://www.clusterlabs.org Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
Bugs: http://bugs.clusterlabs.org




More information about the Pacemaker mailing list