2008-04-22 Marcus Brinkmann <marcus@g10code.de>
* w32-qt-io.cpp, kdpipeiodevice.cpp: New versions from Frank Osterfeld, implement blocking select.
This commit is contained in:
parent
3dcae464f4
commit
a69c74e4ef
@ -1,3 +1,8 @@
|
|||||||
|
2008-04-22 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
|
* w32-qt-io.cpp, kdpipeiodevice.cpp: New versions from Frank
|
||||||
|
Osterfeld, implement blocking select.
|
||||||
|
|
||||||
2008-03-11 Marcus Brinkmann <marcus@g10code.de>
|
2008-03-11 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
* data.c (gpgme_data_read, gpgme_data_write): Retry on EINTR.
|
* data.c (gpgme_data_read, gpgme_data_write): Retry on EINTR.
|
||||||
|
@ -480,8 +480,8 @@ bool KDPipeIODevice::waitForReadyRead( int msecs ) { KDAB_CHECK_THIS;
|
|||||||
LOCKED( r );
|
LOCKED( r );
|
||||||
if ( r->bytesInBuffer() != 0 || r->eof || r->error )
|
if ( r->bytesInBuffer() != 0 || r->eof || r->error )
|
||||||
return true;
|
return true;
|
||||||
assert( false );
|
|
||||||
return r->bufferNotEmptyCondition.wait( &r->mutex, msecs ) ;
|
return msecs >= 0 ? r->bufferNotEmptyCondition.wait( &r->mutex, msecs ) : r->bufferNotEmptyCondition.wait( &r->mutex );
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -573,9 +573,6 @@ _gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock)
|
|||||||
TRACE_BEG2 (DEBUG_SYSIO, "_gpgme_io_select", fds,
|
TRACE_BEG2 (DEBUG_SYSIO, "_gpgme_io_select", fds,
|
||||||
"nfds=%u, nonblock=%u", nfds, nonblock);
|
"nfds=%u, nonblock=%u", nfds, nonblock);
|
||||||
|
|
||||||
/* We only implement the special case of nonblock == true. */
|
|
||||||
assert (nonblock);
|
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
TRACE_SEQ (dbg_help, "select on [ ");
|
TRACE_SEQ (dbg_help, "select on [ ");
|
||||||
@ -587,9 +584,12 @@ _gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock)
|
|||||||
}
|
}
|
||||||
else if (fds[i].for_read )
|
else if (fds[i].for_read )
|
||||||
{
|
{
|
||||||
const KDPipeIODevice * const chan = find_channel (fds[i].fd, 0);
|
KDPipeIODevice * const chan = find_channel (fds[i].fd, 0);
|
||||||
assert (chan);
|
assert (chan);
|
||||||
fds[i].signaled = chan->readWouldBlock() ? 0 : 1;
|
if ( nonblock )
|
||||||
|
fds[i].signaled = chan->readWouldBlock() ? 0 : 1;
|
||||||
|
else
|
||||||
|
fds[i].signaled = chan->waitForReadyRead( 1000 ) ? 1 : 0;
|
||||||
TRACE_ADD1 (dbg_help, "w0x%x ", fds[i].fd);
|
TRACE_ADD1 (dbg_help, "w0x%x ", fds[i].fd);
|
||||||
if ( fds[i].signaled )
|
if ( fds[i].signaled )
|
||||||
count++;
|
count++;
|
||||||
@ -598,7 +598,7 @@ _gpgme_io_select (struct io_select_fd_s *fds, size_t nfds, int nonblock)
|
|||||||
{
|
{
|
||||||
const KDPipeIODevice * const chan = find_channel (fds[i].fd, 0);
|
const KDPipeIODevice * const chan = find_channel (fds[i].fd, 0);
|
||||||
assert (chan);
|
assert (chan);
|
||||||
fds[i].signaled = chan->writeWouldBlock() ? 0 : 1;
|
fds[i].signaled = nonblock ? ( chan->writeWouldBlock() ? 0 : 1 ) : 1;
|
||||||
TRACE_ADD1 (dbg_help, "w0x%x ", fds[i].fd);
|
TRACE_ADD1 (dbg_help, "w0x%x ", fds[i].fd);
|
||||||
if ( fds[i].signaled )
|
if ( fds[i].signaled )
|
||||||
count++;
|
count++;
|
||||||
|
Loading…
Reference in New Issue
Block a user