two bugs and a patch

Nickolai Zeldovich kolya at mit.edu
Sun Jan 7 14:11:18 CET 2001


>                                     Locking is needed when a thread can
> block in select or yield. In case you have multi-homed fileservers, the
> patch attached might help you.

It looks like this particular bug is still there:

  Core was generated by `arlad'.
  Program terminated with signal 11, Segmentation fault.
  #0  0x8086cd1 in rxi_CheckCall (call=0xaaaaaaaa) at rx.c:3250
  3250        struct rx_connection *conn = call->conn;
  (gdb) bt
  #0  0x8086cd1 in rxi_CheckCall (call=0xaaaaaaaa) at rx.c:3250
  #1  0x80877c5 in rxi_ReapConnections () at rx.c:3610
  #2  0x808b987 in rxevent_RaiseEvents (next=0x80f5f10) at rx_event.c:213
  #3  0x808bdb0 in rxi_Listener () at rx_user.c:283
  [...]
  (gdb) fr 1
  #1  0x80877c5 in rxi_ReapConnections () at rx.c:3610
  3610                            rxi_CheckCall(conn->call[i]);
  (gdb) p *conn
  $1 = {queue_item = {prev = 0xaaaaaaaa, next = 0xaaaaaaaa}, next = 0xaaaaaaaa,
  [...]

FWIW, it seems like select() can potentially be called when in the
rxi_ReapConnections loop (rxi_ReapConnections calls rxi_AckAll which
can potentially send to the network, calling osi_NetSend).

-- kolya





More information about the Arla-drinkers mailing list