From: Andreas Eversberg Date: Tue, 21 Feb 2012 17:03:43 +0000 (+0100) Subject: Fixed release of relations between bridge and interface instances (ports) X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=commitdiff_plain;h=4a7489749f1d3914c0d9809e5c149309a66c347c;ds=sidebyside Fixed release of relations between bridge and interface instances (ports) --- diff --git a/appbridge.cpp b/appbridge.cpp index b52e125..efad0d9 100644 --- a/appbridge.cpp +++ b/appbridge.cpp @@ -114,6 +114,7 @@ fail: message->param.disconnectinfo.cause = cause; message->param.disconnectinfo.location = LOCATION_PRIVATE_LOCAL; message_put(message); + ea_endpoint->free_portlist(portlist); /* destroy endpoint */ ea_endpoint->ep_use = 0; @@ -223,18 +224,22 @@ fail: /* port MESSAGE_RELEASE */ void EndpointAppBridge::port_release(struct port_list *portlist, int message_type, union parameter *param) { - unsigned int remote; + struct port_list *remote; PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint received release from port\n"); if (!ea_endpoint->ep_portlist || !ea_endpoint->ep_portlist->next) goto out; if (ea_endpoint->ep_portlist->port_id == portlist->port_id) - remote = ea_endpoint->ep_portlist->next->port_id; + remote = ea_endpoint->ep_portlist->next; else - remote = ea_endpoint->ep_portlist->port_id; + remote = ea_endpoint->ep_portlist; /* forward release */ - message_forward(ea_endpoint->ep_serial, remote, EPOINT_TO_PORT, param); + message_forward(ea_endpoint->ep_serial, remote->port_id, EPOINT_TO_PORT, param); + + /* remove relations to in and out port */ + ea_endpoint->free_portlist(portlist); + ea_endpoint->free_portlist(remote); out: /* destroy endpoint */ diff --git a/endpoint.cpp b/endpoint.cpp index 2e2e7f3..3c59f53 100644 --- a/endpoint.cpp +++ b/endpoint.cpp @@ -109,7 +109,7 @@ Endpoint::~Endpoint(void) portlist = ep_portlist; while(portlist) { if (portlist->port_id) { - PERROR("warning: still relation to port (portlist list)\n"); + PERROR("Endpoint(%d) warning: still relation to port %d (portlist list)\n", ep_serial, portlist->port_id); } mtemp = portlist; portlist = portlist->next; @@ -147,7 +147,7 @@ struct port_list *Endpoint::portlist_new(unsigned int port_id, int port_type, in /* portlist structure */ portlist = (struct port_list *)MALLOC(sizeof(struct port_list)); ememuse++; - PDEBUG(DEBUG_EPOINT, "EPOINT(%d) allocating port_list.\n", ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) allocating port_list, attaching to port %d\n", ep_serial, port_id); /* add port_list to chain */ portlist->next = NULL; @@ -186,7 +186,7 @@ void Endpoint::free_portlist(struct port_list *portlist) *tempp=portlist->next; /* free */ - PDEBUG(DEBUG_EPOINT, "EPOINT(%d) removed port_list from endpoint\n", ep_serial); + PDEBUG(DEBUG_EPOINT, "EPOINT(%d) removed port %d from port_list of endpoint\n", ep_serial, portlist->port_id); FREE(portlist, sizeof(struct port_list)); ememuse--; }