select, pselect and signals...

Frediano Ziglio <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
Hi,
   we have still to release a new version but I have already patches for
next... One of the biggest one is MARS support. One of the problems with
MARS is threading and canceling. Supposing that two threads works on a
single connection using two different statements (which is possible with
MARS!) one thread should be able to acquire a network lock and send/receive
its packet while the other have to wait. Well... this seems easy but
considering that
- the thread with network lock could receive a packet for another session
and should post the packet to the other thread (or let the other thread read
its packet)
- cancellation could occur in another (third) thread or even in the same
thread (using signals like alarm)!

Well.. the code is quite good but one of the problems it's finding a way to
portably signal the network thread to stop waiting and consider a new
condition. This is possible for instance if the network thread is waiting
for a thread but another thread wants to send a packet. In this case a poll
is waiting for data (not for sending) but have to stop in order to wait
data/sending. The solution I found is creating a socket-pair and use this
pair to signal poll to stop. Using signal is not a suitable way cause
pselect/ppoll is not portable. However this require 3 file descriptors (1
for server socket and 2 for socket-pair).

Any advise is accepted.

bye
  freddy77
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.