[Barrelfish-users] Threads using sockets may block

Timothy Roscoe troscoe at inf.ethz.ch
Wed Feb 13 21:02:53 CET 2013


Hi there, 

Just a quick naive question (not for Zaheer): why is the socket
implementation using the default wait set?  Surely for current
blocking semantics each (blocking) socket should have its own
waitset?

 -- Mothy

At Wed, 13 Feb 2013 11:05:27 +0100, Kornilios Kourtis <kornilios.kourtis at inf.ethz.ch> wrote:
> Hi Zaheer,
> 
> On Mon, Feb 11, 2013 at 03:44:59PM +0000, Chothia  Zaheer wrote:
> > Hello,
> >
> > When multiple threads use the sockets API some calls may block indefinitely.
> > It seems this is because they use the default waitset -> lib/posixcompat/sockets.c:
> >
> >   ssize_t recv(int sockfd, void *buf, size_t len, int flags)
> >                     // XXX: Assume it was on the default waitset
> >                     err = us->u.active.binding->change_waitset
> >                         (us->u.active.binding, get_default_waitset());
> >
> > A simple server-client example is attached.  Output looks like this:
> >
> [snip]
> >   client: owner has the IP address 10.110.4.21
> >   [server] listening on port 5000.
> >   [client] created socket: fd = 4
> >   [client] connecting to server at 10.110.4.21:5000 ...
> >   [client] connected to server at 10.110.4.21:5000
> >   [client] calling read on socket
> >   netconn_recv called on [0x805d93d8]
> [snip]
> 
> Just adding to the comments: AFAICT you are running the client and the server
> on the same machine, which typically requires some kind of loopback mechanism
> on the network stack for the routing. Doing some naive grepping in lwip, I got
> the following:
> 
> lib/lwip/src/core/ipv4/ip.c:
> 655-#if (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF)
> 656-    if (ip_addr_cmp(dest, &netif->ip_addr)) {
> 657:        /* Packet to self, enqueue it for loopback */
> 658-        LWIP_DEBUGF(IP_DEBUG, ("netif_loop_output()"));
> 659-        return netif_loop_output(netif, p, dest);
> 660-    } else
> 661-#endif                          /* (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) */
> 
> I'm not sure what our configuration options are, but it might worth making sure
> that the problem is not in loopback routing (e.g., by using two different
> machines, or two different domains).
> 
> cheers,
> Kornilios.
> 
> --
> Kornilios Kourtis
> 
> _______________________________________________
> Barrelfish-users mailing list
> Barrelfish-users at lists.inf.ethz.ch
> https://lists.inf.ethz.ch/mailman/listinfo/barrelfish-users
> 
> 
> 



More information about the Barrelfish-users mailing list