Fix reference counting errors
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@2056 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
parent
b458482f26
commit
0d8f56e197
|
@ -872,3 +872,10 @@
|
|||
stdout to output debug data. That works fine unless (1) the dbg() macro
|
||||
is interrupt logic and the interrupted task has redirected stdout! Most
|
||||
changes were in uIP.
|
||||
* net/uip/uip_tcpinput.c. Connection reference count was not being set correctly
|
||||
when a socket is created by accepting a new connection. Since the reference
|
||||
count is bad, such sockets are not successfully duplicated when being passed
|
||||
to new tasks.
|
||||
* net/net_clone.c. Similarly, after a socket is cloned, its reference count
|
||||
was not being initialized.
|
||||
|
||||
|
|
|
@ -1532,6 +1532,12 @@ nuttx-0.4.11 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
|||
* Changed lots of occurrents of debug macro dbg() to lldbg(). dbg() uses
|
||||
stdout to output debug data. That works fine unless (1) the dbg() macro
|
||||
is interrupt logic and the interrupted task has redirected stdout! Most
|
||||
* net/uip/uip_tcpinput.c. Connection reference count was not being set correctly
|
||||
when a socket is created by accepting a new connection. Since the reference
|
||||
count is bad, such sockets are not successfully duplicated when being passed
|
||||
to new tasks.
|
||||
* net/net_clone.c. Similarly, after a socket is cloned, its reference count
|
||||
was not being initialized.
|
||||
|
||||
pascal-0.1.3 2009-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
|
||||
|
|
|
@ -86,6 +86,7 @@ int net_clone(FAR struct socket *psock1, FAR struct socket *psock2)
|
|||
/* Increment the reference count on the connection */
|
||||
|
||||
DEBUGASSERT(psock2->s_conn);
|
||||
psock2->s_crefs = 1; /* One reference on the new socket itself */
|
||||
|
||||
#ifdef CONFIG_NET_TCP
|
||||
if (psock2->s_type == SOCK_STREAM)
|
||||
|
|
|
@ -167,6 +167,8 @@ void uip_tcpinput(struct uip_driver_s *dev)
|
|||
*/
|
||||
|
||||
conn->tcpstateflags = UIP_ESTABLISHED;
|
||||
conn->crefs = 1;
|
||||
|
||||
if (uip_accept(dev, conn, tmp16) != OK)
|
||||
{
|
||||
/* No, then we have to give the connection back */
|
||||
|
|
Loading…
Reference in New Issue