projects
/
free-sw
/
xcb
/
libxcb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Track 64-bit sequence numbers internally.
[free-sw/xcb/libxcb]
/
src
/
xcb_out.c
diff --git
a/src/xcb_out.c
b/src/xcb_out.c
index
000b121
..
1094ceb
100644
(file)
--- a/
src/xcb_out.c
+++ b/
src/xcb_out.c
@@
-112,7
+112,7
@@
unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
} fields;
uint32_t packet;
} sync_req = { { /* GetInputFocus */ 43, 0, 1 } };
} fields;
uint32_t packet;
} sync_req = { { /* GetInputFocus */ 43, 0, 1 } };
- u
nsigned in
t request;
+ u
int64_
t request;
uint32_t prefix[3] = { 0 };
int veclen = req->count;
enum workarounds workaround = WORKAROUND_NONE;
uint32_t prefix[3] = { 0 };
int veclen = req->count;
enum workarounds workaround = WORKAROUND_NONE;
@@
-187,10
+187,10
@@
unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
workaround = WORKAROUND_GLX_GET_FB_CONFIGS_BUG;
/* get a sequence number and arrange for delivery. */
workaround = WORKAROUND_GLX_GET_FB_CONFIGS_BUG;
/* get a sequence number and arrange for delivery. */
-
_xcb_lock_io(c
);
+
pthread_mutex_lock(&c->iolock
);
/* wait for other writing threads to get out of my way. */
while(c->out.writing)
/* wait for other writing threads to get out of my way. */
while(c->out.writing)
-
_xcb_wait_io(c, &c->out.cond
);
+
pthread_cond_wait(&c->out.cond, &c->iolock
);
request = ++c->out.request;
/* send GetInputFocus (sync_req) when 64k-2 requests have been sent without
request = ++c->out.request;
/* send GetInputFocus (sync_req) when 64k-2 requests have been sent without
@@
-231,7
+231,7
@@
unsigned int xcb_send_request(xcb_connection_t *c, int flags, struct iovec *vect
_xcb_conn_shutdown(c);
request = 0;
}
_xcb_conn_shutdown(c);
request = 0;
}
-
_xcb_unlock_io(c
);
+
pthread_mutex_unlock(&c->iolock
);
return request;
}
return request;
}
@@
-240,9
+240,9
@@
int xcb_flush(xcb_connection_t *c)
int ret;
if(c->has_error)
return 0;
int ret;
if(c->has_error)
return 0;
-
_xcb_lock_io(c
);
+
pthread_mutex_lock(&c->iolock
);
ret = _xcb_out_flush_to(c, c->out.request);
ret = _xcb_out_flush_to(c, c->out.request);
-
_xcb_unlock_io(c
);
+
pthread_mutex_unlock(&c->iolock
);
return ret;
}
return ret;
}
@@
-282,7
+282,7
@@
int _xcb_out_send(xcb_connection_t *c, struct iovec **vector, int *count)
return ret;
}
return ret;
}
-int _xcb_out_flush_to(xcb_connection_t *c, u
nsigned in
t request)
+int _xcb_out_flush_to(xcb_connection_t *c, u
int64_
t request)
{
assert(XCB_SEQUENCE_COMPARE(request, <=, c->out.request));
if(XCB_SEQUENCE_COMPARE(c->out.request_written, >=, request))
{
assert(XCB_SEQUENCE_COMPARE(request, <=, c->out.request));
if(XCB_SEQUENCE_COMPARE(c->out.request_written, >=, request))
@@
-297,7
+297,7
@@
int _xcb_out_flush_to(xcb_connection_t *c, unsigned int request)
return _xcb_out_send(c, &vec_ptr, &count);
}
while(c->out.writing)
return _xcb_out_send(c, &vec_ptr, &count);
}
while(c->out.writing)
-
_xcb_wait_io(c, &c->out.cond
);
+
pthread_cond_wait(&c->out.cond, &c->iolock
);
assert(XCB_SEQUENCE_COMPARE(c->out.request_written, >=, request));
return 1;
}
assert(XCB_SEQUENCE_COMPARE(c->out.request_written, >=, request));
return 1;
}