[Barrelfish-users] Threads using sockets may block

Pravin pravin at inf.ethz.ch
Wed Feb 13 07:39:34 CET 2013


Hi Zaheer,

If I remember correctly, socket API was tested only with single
threaded applications. So, there might be some issue there which we
haven't looked at.

I can take a look into it next week when I am back.  In meanwhile you
can check that if sockets work for single threaded apps, and you might
want to consider to use single thread till then.

[[Sorry if there are multiple copies of this email]]

--
Pravin

On Mon, Feb 11, 2013 at 9:14 PM, Chothia  Zaheer
<zchothia at student.ethz.ch> 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:
>
>   fish> /sockets both
>   spawnd.0: spawning /sockets on core 0
>   LWIP: in lwip_init
>   #### sockets Going ahead with default wait-set
>   LWIP: done with sanity check
>   idc_c_port_mng_srv: trying to [e1000_PORTS_MNG]
>   idc_c_port_mng_srv: success [e1000_PORTS_MNG]
>   idc_c_ARP_lookup_srv: trying to [e1000_ARP]
>   idc_c_ARP_lookup_srv: success [e1000_ARP]
>   LWIP: done with connection setup
>   #### [0:7:sockets] [BIG] [0] MEM_SIZE[62914560], PBUF_POOL_SIZE[16384], RECEIVE_BUFFERS[2044] qid[0]####
>   Created shared_pool of size(Req 131008, Actual 131072) with role [0] and slots [2044]
>   Allocating 2044 pbufs
>   Mapped shared_pool of size(R 131008, A 131072) with role [0], slots[2044] and pool len[2044]
>   [0] new_buffer_id: buffer_id = 3
>   Created shared_pool of size(Req 131008, Actual 131072) with role [1] and slots [2044]
>   Mapped shared_pool of size(R 131008, A 131072) with role [1], slots[2044] and pool len[2044]
>   [0] new_buffer_id: buffer_id = 4
>   LWIP: getting IP from ARP service
>   ####### get IP info called ######
>   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]
>
> The client's read call hangs and the server cannot accept or write its response.
>
> Is there some simple approach to remedy this issue?
>
> Regards,
>
> --Zaheer
>
>
> _______________________________________________
> 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