diff options
author | marha <marha@users.sourceforge.net> | 2010-04-19 13:31:55 +0000 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2010-04-19 13:31:55 +0000 |
commit | 0b44ee3fb92120190fa46e73b7abfbaa8a0adaec (patch) | |
tree | 19cbbfc194d8d543a7826cdb5cd6af966d15c619 /libxcb/src/xcb_in.c | |
parent | 0b53765917ae196147886189ca3514a07e0eb45e (diff) | |
download | vcxsrv-0b44ee3fb92120190fa46e73b7abfbaa8a0adaec.tar.gz vcxsrv-0b44ee3fb92120190fa46e73b7abfbaa8a0adaec.tar.bz2 vcxsrv-0b44ee3fb92120190fa46e73b7abfbaa8a0adaec.zip |
svn merge -r539:HEAD "^/branches/released" .
Diffstat (limited to 'libxcb/src/xcb_in.c')
-rw-r--r-- | libxcb/src/xcb_in.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/libxcb/src/xcb_in.c b/libxcb/src/xcb_in.c index 0e55dc42e..7ab880952 100644 --- a/libxcb/src/xcb_in.c +++ b/libxcb/src/xcb_in.c @@ -72,16 +72,6 @@ typedef struct reader_list { struct reader_list *next; } reader_list; -static void wake_up_next_reader(xcb_connection_t *c) -{ - int pthreadret; - if(c->in.readers) - pthreadret = pthread_cond_signal(c->in.readers->data); - else - pthreadret = pthread_cond_signal(&c->in.event_cond); - assert(pthreadret == 0); -} - static int read_packet(xcb_connection_t *c) { xcb_generic_reply_t genrep; @@ -157,9 +147,7 @@ static int read_packet(xcb_connection_t *c) /* XGE events may have sizes > 32 */ if (genrep.response_type == XCB_XGE_EVENT) - { - eventlength = ((xcb_ge_event_t*)&genrep)->length * 4; - } + eventlength = genrep.length * 4; buf = malloc(length + eventlength + (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t))); @@ -439,7 +427,7 @@ void *xcb_wait_for_reply(xcb_connection_t *c, unsigned int request, xcb_generic_ pthread_cond_destroy(&cond); } - wake_up_next_reader(c); + _xcb_in_wake_up_next_reader(c); pthread_mutex_unlock(&c->iolock); return ret; } @@ -472,7 +460,7 @@ xcb_generic_event_t *xcb_wait_for_event(xcb_connection_t *c) if(!_xcb_conn_wait(c, &c->in.event_cond, 0, 0)) break; - wake_up_next_reader(c); + _xcb_in_wake_up_next_reader(c); pthread_mutex_unlock(&c->iolock); return ret; } @@ -556,6 +544,16 @@ void _xcb_in_destroy(_xcb_in *in) } } +void _xcb_in_wake_up_next_reader(xcb_connection_t *c) +{ + int pthreadret; + if(c->in.readers) + pthreadret = pthread_cond_signal(c->in.readers->data); + else + pthreadret = pthread_cond_signal(&c->in.event_cond); + assert(pthreadret == 0); +} + int _xcb_in_expect_reply(xcb_connection_t *c, uint64_t request, enum workarounds workaround, int flags) { pending_reply *pend = malloc(sizeof(pending_reply)); |