Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Unified Diff: third_party/instrumented_libraries/patches/libxcb1.precise.diff

Issue 796553002: Instrumented libraries: attempt to fix a deadlock in libxcb1. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/instrumented_libraries/instrumented_libraries.gyp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/instrumented_libraries/patches/libxcb1.precise.diff
diff --git a/third_party/instrumented_libraries/patches/libxcb1.precise.diff b/third_party/instrumented_libraries/patches/libxcb1.precise.diff
new file mode 100644
index 0000000000000000000000000000000000000000..aeb486ebf6a99aebf6ac8f0624af3d8808675eec
--- /dev/null
+++ b/third_party/instrumented_libraries/patches/libxcb1.precise.diff
@@ -0,0 +1,26 @@
+diff -rupN ./src/xcb_conn.c ../libxcb-1.8.1-patched/src/xcb_conn.c
+--- ./src/xcb_conn.c 2012-01-11 21:05:41.000000000 +0400
++++ ../libxcb-1.8.1-patched/src/xcb_conn.c 2014-12-10 23:37:44.432834622 +0300
+@@ -418,10 +418,20 @@ int _xcb_conn_wait(xcb_connection_t *c,
+
+ if(ret)
+ {
++ /* The code allows two threads to call select()/poll() at the same time.
++ * First thread just wants to read, a second thread wants to write, too.
++ * We have to make sure that we don't steal the reading thread's reply
++ * and let it get stuck in select()/poll().
++ * So a thread may read if either:
++ * - There is no other thread that wants to read (the above situation
++ * did not occur).
++ * - It is the reading thread (above situation occurred).
++ */
++ int may_read = c->in.reading == 1 || !count;
+ #if USE_POLL
+- if((fd.revents & POLLIN) == POLLIN)
++ if(may_read && (fd.revents & POLLIN) == POLLIN)
+ #else
+- if(FD_ISSET(c->fd, &rfds))
++ if(may_read && FD_ISSET(c->fd, &rfds))
+ #endif
+ ret = ret && _xcb_in_read(c);
+
« no previous file with comments | « third_party/instrumented_libraries/instrumented_libraries.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698