Merge branch 'master' of git+ssh://iano@git.freedesktop.org/git/xcb
This commit is contained in:
commit
6f369fde3c
|
@ -1,6 +1,5 @@
|
|||
compat
|
||||
copyright
|
||||
fd.o-*
|
||||
stamp-*
|
||||
tmp
|
||||
files
|
||||
|
|
|
@ -1,28 +1,34 @@
|
|||
libxcb0 (0.9-1pre2v4) unstable; urgency=low
|
||||
libxcb0 (0.9-3) UNRELEASED; urgency=low
|
||||
|
||||
pre2v1:
|
||||
* Split into libxcb0 and libxcb0-dev.
|
||||
* Change control file for new packages.
|
||||
* Add install and dirs files for new packages.
|
||||
* Update Build-Depends for renaming of fd.o-xau, fd.o-xproto, and
|
||||
fd.o-xcb-proto.
|
||||
* Remove fd.o prefix from package name.
|
||||
* Change Maintainer to xcb@lists.freedesktop.org, move myself to
|
||||
Uploaders, and add Jamey Sharp to Uploaders. Update copyright.debian
|
||||
accordingly.
|
||||
* Add Bugs field pointing to xcb@lists.freedesktop.org.
|
||||
* Update homepage URL in description and copyright.debian to
|
||||
http://xcb.freedesktop.org, and put it in a Homepage: field in the
|
||||
description.
|
||||
* Stop running autoreconf in debian/rules, and remove Build-Depends for
|
||||
autoconf, automake, and libtool.
|
||||
* Update -dbg package handling to work with debhelper compat level 5.
|
||||
Increase minimum version on debhelper Build-Depends to 5.0.0.
|
||||
* Stop installing the libtool .la files.
|
||||
* Add Build-Depends on libxdmcp-dev.
|
||||
* Debian X11R7 transition:
|
||||
* Change Depends and Build-Depends on x-dev to x11proto-core-dev.
|
||||
* Install headers to /usr/include/X11, not /usr/X11R6/include/X11.
|
||||
* Pre-Depends: x11-common (>= 1:1.09).
|
||||
|
||||
pre2v2:
|
||||
* Add libxcb0-dbg package.
|
||||
|
||||
pre2v3:
|
||||
* New upstream snapshot.
|
||||
-- Josh Triplett <josh@freedesktop.org> Sun, 16 Apr 2006 09:25:09 -0700
|
||||
|
||||
pre2v4:
|
||||
* New upstream snapshot.
|
||||
libxcb0 (0.9-2) unstable; urgency=low
|
||||
|
||||
* Split into libxcb0 and libxcb0-dev.
|
||||
* Change control file for new packages.
|
||||
* Add install and dirs files for new packages.
|
||||
* Update Build-Depends for renaming of fd.o-xau, fd.o-xproto, and
|
||||
fd.o-xcb-proto.
|
||||
* Remove fd.o prefix from package name.
|
||||
* Change Maintainer to xcb@lists.freedesktop.org, move myself to
|
||||
Uploaders, and add Jamey Sharp to Uploaders. Update copyright.debian
|
||||
accordingly.
|
||||
* Add Bugs field pointing to xcb@lists.freedesktop.org.
|
||||
* Update homepage URL in description and copyright.debian to
|
||||
http://xcb.freedesktop.org, and put it in a Homepage: field in the
|
||||
description.
|
||||
* Add libxcb0-dbg package.
|
||||
|
||||
-- Josh Triplett <josh@freedesktop.org> Tue, 17 May 2005 12:53:53 -0700
|
||||
|
||||
|
|
|
@ -2,8 +2,7 @@ Source: libxcb0
|
|||
Priority: optional
|
||||
Maintainer: XCB Developers <xcb@lists.freedesktop.org>
|
||||
Uploaders: Jamey Sharp <sharpone@debian.org>, Josh Triplett <josh@freedesktop.org>
|
||||
Build-Depends: x-dev, libxau-dev, xcb-proto, cdbs, debhelper (>= 4.1.76), pkg-config, autoconf, automake1.9 | automaken, libtool, xsltproc, check, binutils (>= 2.12.90.0.9)
|
||||
Build-Conflicts: automake1.4, automake1.5, automake1.6
|
||||
Build-Depends: x11proto-core-dev, libxau-dev, libxdmcp-dev, xcb-proto, cdbs, debhelper (>= 5.0.0), pkg-config, xsltproc, check, binutils (>= 2.12.90.0.9)
|
||||
Standards-Version: 3.6.1
|
||||
Bugs: mailto:xcb@lists.freedesktop.org
|
||||
|
||||
|
@ -12,30 +11,41 @@ Section: libs
|
|||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Description: X C Binding
|
||||
Xlib has been the standard C binding for the X Window System protocol for
|
||||
many years now. It is an excellent piece of work, but there are applications
|
||||
for which it is not ideal. XCB builds on nearly two decades of experience
|
||||
with X specifically and software engineering in general in an effort to
|
||||
replace the aging Xlib code base.
|
||||
This package contains the library files needed to run software using the X C
|
||||
Binding (XCB).
|
||||
.
|
||||
This package contains the library files needed to run software using
|
||||
XCB.
|
||||
The XCB library provides an interface to the X Window System protocol,
|
||||
designed to replace the Xlib interface. XCB provides several advantages over
|
||||
Xlib:
|
||||
.
|
||||
* Size: small library and lower memory footprint
|
||||
* Latency hiding: batch several requests and wait for the replies later
|
||||
* Direct protocol access: one-to-one mapping between interface and protocol
|
||||
* Thread support: access XCB from multiple threads, with no explicit locking
|
||||
* Easy creation of new extensions: automatically generates interface from
|
||||
machine-parsable protocol descriptions
|
||||
.
|
||||
Homepage: http://xcb.freedesktop.org
|
||||
|
||||
Package: libxcb0-dev
|
||||
Section: libdevel
|
||||
Architecture: any
|
||||
Depends: libxcb0 (= ${Source-Version}), x-dev
|
||||
Depends: libxcb0 (= ${Source-Version}), x11proto-core-dev
|
||||
Pre-Depends: x11-common (>= 1:1.09)
|
||||
Description: X C Binding, development files
|
||||
Xlib has been the standard C binding for the X Window System protocol for
|
||||
many years now. It is an excellent piece of work, but there are applications
|
||||
for which it is not ideal. XCB builds on nearly two decades of experience
|
||||
with X specifically and software engineering in general in an effort to
|
||||
replace the aging Xlib code base.
|
||||
.
|
||||
This package contains the header and library files needed to build software
|
||||
using XCB.
|
||||
using the X C Binding (XCB) library.
|
||||
.
|
||||
The XCB library provides an interface to the X Window System protocol,
|
||||
designed to replace the Xlib interface. XCB provides several advantages over
|
||||
Xlib:
|
||||
.
|
||||
* Size: small library and lower memory footprint
|
||||
* Latency hiding: batch several requests and wait for the replies later
|
||||
* Direct protocol access: one-to-one mapping between interface and protocol
|
||||
* Thread support: access XCB from multiple threads, with no explicit locking
|
||||
* Easy creation of new extensions: automatically generates interface from
|
||||
machine-parsable protocol descriptions
|
||||
.
|
||||
Homepage: http://xcb.freedesktop.org
|
||||
|
||||
|
@ -44,13 +54,18 @@ Section: libdevel
|
|||
Architecture: any
|
||||
Depends: libxcb0 (= ${Source-Version})
|
||||
Description: X C Binding, debugging symbols
|
||||
Xlib has been the standard C binding for the X Window System protocol for
|
||||
many years now. It is an excellent piece of work, but there are applications
|
||||
for which it is not ideal. XCB builds on nearly two decades of experience
|
||||
with X specifically and software engineering in general in an effort to
|
||||
replace the aging Xlib code base.
|
||||
.
|
||||
This package contains the debugging symbols associated with libxcb0. gdb will
|
||||
automatically use these symbols when debugging libxcb0.
|
||||
.
|
||||
The XCB library provides an interface to the X Window System protocol,
|
||||
designed to replace the Xlib interface. XCB provides several advantages over
|
||||
Xlib:
|
||||
.
|
||||
* Size: small library and lower memory footprint
|
||||
* Latency hiding: batch several requests and wait for the replies later
|
||||
* Direct protocol access: one-to-one mapping between interface and protocol
|
||||
* Thread support: access XCB from multiple threads, with no explicit locking
|
||||
* Easy creation of new extensions: automatically generates interface from
|
||||
machine-parsable protocol descriptions
|
||||
.
|
||||
Homepage: http://xcb.freedesktop.org
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
usr/X11R6/include/X11/*
|
||||
usr/include/X11/*
|
||||
usr/lib/lib*.a
|
||||
usr/lib/lib*.so
|
||||
usr/lib/pkgconfig/*
|
||||
usr/lib/*.la
|
||||
|
|
|
@ -6,12 +6,6 @@ include /usr/share/cdbs/1/rules/debhelper.mk
|
|||
include /usr/share/cdbs/1/class/autotools.mk
|
||||
|
||||
DEB_CONFIGURE_EXTRA_FLAGS = --with-opt
|
||||
DEB_CONFIGURE_INCLUDEDIR = "\$${prefix}/X11R6/include"
|
||||
DEB_DH_STRIP_ARGS=--dbg-package=libxcb0
|
||||
|
||||
debian/stamp-autotools-files:
|
||||
autoreconf -v --install
|
||||
touch debian/stamp-autotools-files
|
||||
|
||||
debian/copyright: debian/copyright.debian COPYING
|
||||
cat $+ > $@
|
||||
|
|
|
@ -1,17 +1,36 @@
|
|||
lib_LTLIBRARIES = libXCB.la
|
||||
lib_LTLIBRARIES = libXCB.la \
|
||||
libXCBcomposite.la \
|
||||
libXCBdamage.la \
|
||||
libXCBdpms.la \
|
||||
libXCBglx.la \
|
||||
libXCBrandr.la \
|
||||
libXCBrecord.la \
|
||||
libXCBrender.la \
|
||||
libXCBres.la \
|
||||
libXCBscreensaver.la \
|
||||
libXCBshape.la \
|
||||
libXCBshm.la \
|
||||
libXCBsync.la \
|
||||
libXCBxevie.la \
|
||||
libXCBxf86dri.la \
|
||||
libXCBxfixes.la \
|
||||
libXCBxprint.la \
|
||||
libXCBxv.la \
|
||||
libXCBxvmc.la
|
||||
|
||||
EXTHEADERS = \
|
||||
extensions/bigreq.h \
|
||||
extensions/composite.h \
|
||||
extensions/damage.h \
|
||||
extensions/dpms.h \
|
||||
extensions/glx.h \
|
||||
extensions/shm.h \
|
||||
extensions/shape.h \
|
||||
extensions/randr.h \
|
||||
extensions/record.h \
|
||||
extensions/render.h \
|
||||
extensions/res.h \
|
||||
extensions/dpms.h \
|
||||
extensions/screensaver.h \
|
||||
extensions/shape.h \
|
||||
extensions/shm.h \
|
||||
extensions/sync.h \
|
||||
extensions/xc_misc.h \
|
||||
extensions/xevie.h \
|
||||
|
@ -24,14 +43,15 @@ EXTSOURCES = \
|
|||
extensions/bigreq.c \
|
||||
extensions/composite.c \
|
||||
extensions/damage.c \
|
||||
extensions/dpms.c \
|
||||
extensions/glx.c \
|
||||
extensions/shm.c \
|
||||
extensions/shape.c \
|
||||
extensions/randr.c \
|
||||
extensions/record.c \
|
||||
extensions/render.c \
|
||||
extensions/res.c \
|
||||
extensions/dpms.c \
|
||||
extensions/screensaver.c \
|
||||
extensions/shape.c \
|
||||
extensions/shm.c \
|
||||
extensions/sync.c \
|
||||
extensions/xc_misc.c \
|
||||
extensions/xevie.c \
|
||||
|
@ -42,11 +62,18 @@ EXTSOURCES = \
|
|||
extensions/xvmc.c
|
||||
EXTENSIONS = $(EXTSOURCES) $(EXTHEADERS)
|
||||
|
||||
ESSENTIAL_EXTENSIONS = \
|
||||
extensions/bigreq.h \
|
||||
extensions/bigreq.c \
|
||||
extensions/xc_misc.h \
|
||||
extensions/xc_misc.c
|
||||
|
||||
COREHEADERS = xproto.h xcb_types.h
|
||||
CORESOURCES = xproto.c xcb_types.c
|
||||
COREPROTO = $(CORESOURCES) $(COREHEADERS)
|
||||
|
||||
xcbinclude_HEADERS = xcb.h xcbext.h xcbxlib.h $(COREHEADERS) $(EXTHEADERS)
|
||||
noinst_HEADERS = xcbint.h
|
||||
|
||||
CFLAGS =
|
||||
AM_CFLAGS = $(COPTFLAGS) $(CWARNFLAGS) $(CDEBUGFLAGS) $(XCBPROTO_CFLAGS) $(XPROTO_CFLAGS) $(XAU_CFLAGS) $(XDMCP_CFLAGS)
|
||||
|
@ -54,13 +81,52 @@ libXCB_la_LIBADD = $(XCBPROTO_LIBS) $(XPROTO_LIBS) $(XAU_LIBS) $(XDMCP_LIBS)
|
|||
libXCB_la_SOURCES = \
|
||||
xcb_conn.c xcb_out.c xcb_in.c xcb_ext.c xcb_xid.c \
|
||||
xcb_list.c xcb_util.c xcb_xlib.c xcb_auth.c \
|
||||
$(COREPROTO) $(EXTENSIONS)
|
||||
$(COREPROTO) $(ESSENTIAL_EXTENSIONS)
|
||||
|
||||
BUILT_SOURCES = $(COREPROTO) $(EXTENSIONS)
|
||||
CLEANFILES = $(COREPROTO) $(EXTENSIONS)
|
||||
clean-local:
|
||||
rmdir extensions || true
|
||||
|
||||
XCB_LIBS = $(top_builddir)/src/libXCB.la
|
||||
|
||||
libXCBcomposite_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBcomposite_la_SOURCES = extensions/composite.c extensions/composite.h
|
||||
libXCBdamage_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBdamage_la_SOURCES = extensions/damage.c extensions/damage.h
|
||||
libXCBdpms_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBdpms_la_SOURCES = extensions/dpms.c extensions/dpms.h
|
||||
libXCBglx_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBglx_la_SOURCES = extensions/glx.c extensions/glx.h
|
||||
libXCBrandr_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBrandr_la_SOURCES = extensions/randr.c extensions/randr.h
|
||||
libXCBrecord_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBrecord_la_SOURCES = extensions/record.c extensions/record.h
|
||||
libXCBrender_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBrender_la_SOURCES = extensions/render.c extensions/render.h
|
||||
libXCBres_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBres_la_SOURCES = extensions/res.c extensions/res.h
|
||||
libXCBscreensaver_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBscreensaver_la_SOURCES = extensions/screensaver.c extensions/screensaver.h
|
||||
libXCBshape_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBshape_la_SOURCES = extensions/shape.c extensions/shape.h
|
||||
libXCBshm_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBshm_la_SOURCES = extensions/shm.c extensions/shm.h
|
||||
libXCBsync_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBsync_la_SOURCES = extensions/sync.c extensions/sync.h
|
||||
libXCBxevie_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBxevie_la_SOURCES = extensions/xevie.c extensions/xevie.h
|
||||
libXCBxf86dri_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBxf86dri_la_SOURCES = extensions/xf86dri.c extensions/xf86dri.h
|
||||
libXCBxfixes_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBxfixes_la_SOURCES = extensions/xfixes.c extensions/xfixes.h
|
||||
libXCBxprint_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBxprint_la_SOURCES = extensions/xprint.c extensions/xprint.h
|
||||
libXCBxv_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBxv_la_SOURCES = extensions/xv.c extensions/xv.h
|
||||
libXCBxvmc_la_LIBADD = $(XCB_LIBS)
|
||||
libXCBxvmc_la_SOURCES = extensions/xvmc.c extensions/xvmc.h
|
||||
|
||||
vpath %.xml $(XCBPROTO_XCBINCLUDEDIR) $(XCBPROTO_XCBINCLUDEDIR)/extensions
|
||||
|
||||
%.h: %.xml c-client.xsl
|
||||
|
|
|
@ -273,9 +273,10 @@ XCBGenericEvent *XCBPollForEvent(XCBConnection *c, int *error);
|
|||
* processed. This function enables applications to determine whether
|
||||
* forcing a cookie is going to block.
|
||||
*
|
||||
* @todo review that function.
|
||||
* @deprecated This function is deprecated in favor of XCBPollForReply.
|
||||
* It must not be used in newly written code.
|
||||
*/
|
||||
unsigned int XCBGetRequestRead(XCBConnection *c);
|
||||
unsigned int XCBGetRequestRead(XCBConnection *c) deprecated;
|
||||
|
||||
|
||||
/* xcb_ext.c */
|
||||
|
|
|
@ -253,7 +253,11 @@ int _xcb_conn_wait(XCBConnection *c, pthread_cond_t *cond, struct iovec **vector
|
|||
}
|
||||
|
||||
pthread_mutex_unlock(&c->iolock);
|
||||
ret = select(c->fd + 1, &rfds, &wfds, 0, 0) > 0;
|
||||
do {
|
||||
ret = select(c->fd + 1, &rfds, &wfds, 0, 0);
|
||||
} while (ret == -1 && errno == EINTR);
|
||||
if (ret < 0)
|
||||
ret = 0;
|
||||
pthread_mutex_lock(&c->iolock);
|
||||
|
||||
if(ret)
|
||||
|
|
141
src/xcb_in.c
141
src/xcb_in.c
|
@ -229,7 +229,9 @@ static int read_block(const int fd, void *buf, const size_t len)
|
|||
fd_set fds;
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(fd, &fds);
|
||||
ret = select(fd + 1, &fds, 0, 0, 0);
|
||||
do {
|
||||
ret = select(fd + 1, &fds, 0, 0, 0);
|
||||
} while (ret == -1 && errno == EINTR);
|
||||
}
|
||||
if(ret <= 0)
|
||||
return ret;
|
||||
|
@ -237,90 +239,113 @@ static int read_block(const int fd, void *buf, const size_t len)
|
|||
return len;
|
||||
}
|
||||
|
||||
/* Public interface */
|
||||
|
||||
void *XCBWaitForReply(XCBConnection *c, unsigned int request, XCBGenericError **e)
|
||||
static int poll_for_reply(XCBConnection *c, unsigned int request, void **reply, XCBGenericError **error)
|
||||
{
|
||||
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
|
||||
reader_list reader;
|
||||
reader_list **prev_reader;
|
||||
struct reply_list *head;
|
||||
void *ret = 0;
|
||||
if(e)
|
||||
*e = 0;
|
||||
|
||||
/* If an error occurred when issuing the request, fail immediately. */
|
||||
if(!request)
|
||||
return 0;
|
||||
|
||||
pthread_mutex_lock(&c->iolock);
|
||||
|
||||
/* If this request has not been written yet, write it. */
|
||||
if(!_xcb_out_flush_to(c, request))
|
||||
goto done; /* error */
|
||||
|
||||
for(prev_reader = &c->in.readers; *prev_reader && (*prev_reader)->request <= request; prev_reader = &(*prev_reader)->next)
|
||||
if((*prev_reader)->request == request)
|
||||
goto done; /* error */
|
||||
|
||||
reader.request = request;
|
||||
reader.data = &cond;
|
||||
reader.next = *prev_reader;
|
||||
*prev_reader = &reader;
|
||||
|
||||
/* If this request has not completed yet and has no reply waiting,
|
||||
* wait for one. */
|
||||
while(c->in.request_completed < request &&
|
||||
!(c->in.request_read == request && c->in.current_reply))
|
||||
if(!_xcb_conn_wait(c, &cond, 0, 0))
|
||||
goto done;
|
||||
|
||||
if(c->in.request_read != request)
|
||||
head = 0;
|
||||
/* We've read requests past the one we want, so if it has replies we have
|
||||
* them all and they're in the replies map. */
|
||||
else if(request < c->in.request_read)
|
||||
{
|
||||
head = _xcb_map_remove(c->in.replies, request);
|
||||
if(head && head->next)
|
||||
_xcb_map_put(c->in.replies, request, head->next);
|
||||
}
|
||||
else
|
||||
/* We're currently processing the responses to the request we want, and we
|
||||
* have a reply ready to return. So just return it without blocking. */
|
||||
else if(request == c->in.request_read && c->in.current_reply)
|
||||
{
|
||||
head = c->in.current_reply;
|
||||
if(head)
|
||||
{
|
||||
c->in.current_reply = head->next;
|
||||
if(!head->next)
|
||||
c->in.current_reply_tail = &c->in.current_reply;
|
||||
}
|
||||
c->in.current_reply = head->next;
|
||||
if(!head->next)
|
||||
c->in.current_reply_tail = &c->in.current_reply;
|
||||
}
|
||||
/* We know this request can't have any more replies, and we've already
|
||||
* established it doesn't have a reply now. Don't bother blocking. */
|
||||
else if(request == c->in.request_completed)
|
||||
head = 0;
|
||||
/* We may have more replies on the way for this request: block until we're
|
||||
* sure. */
|
||||
else
|
||||
return 0;
|
||||
|
||||
if(error)
|
||||
*error = 0;
|
||||
*reply = 0;
|
||||
|
||||
if(head)
|
||||
{
|
||||
ret = head->reply;
|
||||
free(head);
|
||||
|
||||
if(((XCBGenericRep *) ret)->response_type == XCBError)
|
||||
if(((XCBGenericRep *) head->reply)->response_type == XCBError)
|
||||
{
|
||||
if(e)
|
||||
*e = ret;
|
||||
if(error)
|
||||
*error = head->reply;
|
||||
else
|
||||
free(ret);
|
||||
ret = 0;
|
||||
free(head->reply);
|
||||
}
|
||||
else
|
||||
*reply = head->reply;
|
||||
|
||||
free(head);
|
||||
}
|
||||
|
||||
done:
|
||||
for(prev_reader = &c->in.readers; *prev_reader && (*prev_reader)->request <= request; prev_reader = &(*prev_reader)->next)
|
||||
if(*prev_reader == &reader)
|
||||
{
|
||||
*prev_reader = (*prev_reader)->next;
|
||||
break;
|
||||
}
|
||||
pthread_cond_destroy(&cond);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Public interface */
|
||||
|
||||
void *XCBWaitForReply(XCBConnection *c, unsigned int request, XCBGenericError **e)
|
||||
{
|
||||
void *ret = 0;
|
||||
if(e)
|
||||
*e = 0;
|
||||
|
||||
pthread_mutex_lock(&c->iolock);
|
||||
|
||||
/* If this request has not been written yet, write it. */
|
||||
if(_xcb_out_flush_to(c, request))
|
||||
{
|
||||
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
|
||||
reader_list reader;
|
||||
reader_list **prev_reader;
|
||||
|
||||
for(prev_reader = &c->in.readers; *prev_reader && (*prev_reader)->request <= request; prev_reader = &(*prev_reader)->next)
|
||||
/* empty */;
|
||||
reader.request = request;
|
||||
reader.data = &cond;
|
||||
reader.next = *prev_reader;
|
||||
*prev_reader = &reader;
|
||||
|
||||
while(!poll_for_reply(c, request, &ret, e))
|
||||
if(!_xcb_conn_wait(c, &cond, 0, 0))
|
||||
break;
|
||||
|
||||
for(prev_reader = &c->in.readers; *prev_reader && (*prev_reader)->request <= request; prev_reader = &(*prev_reader)->next)
|
||||
if(*prev_reader == &reader)
|
||||
{
|
||||
*prev_reader = (*prev_reader)->next;
|
||||
break;
|
||||
}
|
||||
pthread_cond_destroy(&cond);
|
||||
}
|
||||
|
||||
wake_up_next_reader(c);
|
||||
pthread_mutex_unlock(&c->iolock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int XCBPollForReply(XCBConnection *c, unsigned int request, void **reply, XCBGenericError **error)
|
||||
{
|
||||
int ret;
|
||||
assert(reply != 0);
|
||||
pthread_mutex_lock(&c->iolock);
|
||||
ret = poll_for_reply(c, request, reply, error);
|
||||
pthread_mutex_unlock(&c->iolock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
XCBGenericEvent *XCBWaitEvent(XCBConnection *c)
|
||||
{
|
||||
return XCBWaitForEvent(c);
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/un.h>
|
||||
#include <netinet/in.h>
|
||||
|
|
|
@ -63,6 +63,7 @@ unsigned int XCBSendRequest(XCBConnection *c, int flags, struct iovec *vector, c
|
|||
/* xcb_in.c */
|
||||
|
||||
void *XCBWaitForReply(XCBConnection *c, unsigned int request, XCBGenericError **e);
|
||||
int XCBPollForReply(XCBConnection *c, unsigned int request, void **reply, XCBGenericError **error);
|
||||
|
||||
|
||||
/* xcb_xid.c */
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "xcb.h"
|
||||
|
||||
/* This function must be called with the IOLock held. */
|
||||
unsigned int XCBGetQueuedRequestRead(XCBConnection *c);
|
||||
unsigned int XCBGetQueuedRequestRead(XCBConnection *c) deprecated;
|
||||
|
||||
/* This function must be called with the IOLock held. */
|
||||
unsigned int XCBGetRequestSent(XCBConnection *c);
|
||||
|
|
Loading…
Reference in New Issue