From b4c3f9678a1546165db79e2afe8909bde4f5c503 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 10 Sep 2014 02:35:55 -0700 Subject: [PATCH] Use poll() to avoid an infinite blocking read() that causes ANRs during cleanup --- jni/evdev_reader/evdev_reader.c | 26 ++++++++++++++++++++++++-- libs/arm64-v8a/libevdev_reader.so | Bin 5368 -> 5368 bytes libs/armeabi-v7a/libevdev_reader.so | Bin 13476 -> 13476 bytes libs/mips/libevdev_reader.so | Bin 5488 -> 5492 bytes libs/x86/libevdev_reader.so | Bin 5176 -> 5176 bytes libs/x86_64/libevdev_reader.so | Bin 5632 -> 5632 bytes 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/jni/evdev_reader/evdev_reader.c b/jni/evdev_reader/evdev_reader.c index 16586d43..c003911c 100644 --- a/jni/evdev_reader/evdev_reader.c +++ b/jni/evdev_reader/evdev_reader.c @@ -6,6 +6,7 @@ #include #include #include +#include JNIEXPORT jint JNICALL Java_com_limelight_binding_input_evdev_EvdevReader_open(JNIEnv *env, jobject this, jstring absolutePath) { @@ -60,12 +61,33 @@ Java_com_limelight_binding_input_evdev_EvdevReader_hasKey(JNIEnv *env, jobject t JNIEXPORT jint JNICALL Java_com_limelight_binding_input_evdev_EvdevReader_read(JNIEnv *env, jobject this, jint fd, jbyteArray buffer) { jint ret; - jbyte *data = (*env)->GetByteArrayElements(env, buffer, NULL); + jbyte *data; + int pollres; + struct pollfd pollinfo; + + data = (*env)->GetByteArrayElements(env, buffer, NULL); if (data == NULL) { return -1; } - ret = read(fd, data, sizeof(struct input_event)); + do + { + // Unwait every 250 ms to return to caller if the fd is closed + pollinfo.fd = fd; + pollinfo.events = POLLIN; + pollinfo.revents = 0; + pollres = poll(&pollinfo, 1, 250); + } + while (pollres == 0); + + if (pollres > 0 && (pollinfo.revents & POLLIN)) { + // We'll have data available now + ret = read(fd, data, sizeof(struct input_event)); + } + else { + // There must have been a failure + ret = -1; + } (*env)->ReleaseByteArrayElements(env, buffer, data, 0); diff --git a/libs/arm64-v8a/libevdev_reader.so b/libs/arm64-v8a/libevdev_reader.so index 669f25f9882d11346aecfee27dfa5988764865b8..4f9ea00be9c6fda77062a05176de450893d14dd2 100755 GIT binary patch delta 1570 zcmbVMU1(cn82)}@b544a=A5KG$*Lr>N=O*Z#)_FJHaSDOAH?iOr1-N+a}jm2UI&f@uJC%lX($AS&&_a=@SNv+ zf4=v9zn}AM#5dx_5N+z=p-j+;2hiw8h=^{42N8q}i_s>$#0JIRaYYJolTG*%Z8>lBlDCKe zvKf~LnaAkU?YJx#=p+oIK8pHNayvQ3P1xg?=#nea@!*E z0J51~va9Z~?V34*zTTcU=8DP(Z2w-{-*fGXYmK_b&YV6C&vy*KY{#4OjJ^NdWd${1 z*d6g+?Xr%Jp_Rj{ZWX58lDD?aD#52{{T{7z+pJyigIf(Nc0H3C+q@yT>sEI;hh%!2 zZ(T1J2`S3;p_czM=oi$^UvTu@<9d`u>W~)Rknb3V`VJviDJd*ygy?_5tT04xf-ENK zH;@tc(=T9IRN-AQM~gT*MGJ7ulcF!f1E)e6T1=g7fU0Sh#E zFtKtXjm>1r>!TVrlx|_8dX1l|n+cY2*$o~@Ea5!H3k&^NXqA)1UuY*=ewH|ZI_>3; z9>U!eOx!h$9P$A2Ig%tKhl9`2Fo}Evc@y~$hIJ(giSN+&?a&{wb?5J&0MQqrC5Yp91`hj@bPmRG{2qMdi^x;X1;yH?)L<5^ zMYpBdL`Iy?K2Kx%8trn;=&^AHaH_7A?YTr2

>%n;guy_hmaqk^J> zsYEEd>hZ0LGRiKzNOKiwFLt-6yBSolo%TYorc!pLveH!&aXUU=&N;QzD_?ldbKduR z|GwY$V0&<`pEvBp*hpJvUGbSQ-qq!|2dIU+D%iExsLU<97BiaOK+_v&+SgO&Tlc!& z|1v3j;^=>pcriuAbuZEkkLM0U5kMaxOD6y+vXIOhk%}i4*Z^erhk$+{K)L9{A1eci zC=?Tj0UFQ?gn&5N;nY2X1zCe$Q%1E7Ov!|Hp1x92e3E8_MYj|+QItWDb1pFgOTUN6 z5Gg+1^&1x|e~HdQpMd^?(ez^Gy_jdE7k{0MKyq+P7KhBb#2x_4d@HJJ81n2-cVph5 zav;;!_Qr<2F#}6w(g^QeS`GZn>G!~Ky4mxtoH}C-Z#hN4b#72On50@zr%ORS+>E+A zr(jg0?}8Ss!210@YlQB=`ZuhteO8MeQLV%NCdkaU-n+Uu$Jm_l(^x0=4Na&PeWbo= z+;kl4Lv+DeWi8K`{Re5<7+;|mwKQ+ijCPza(MSkowJAQ2ze!#tJCxxU=z8eo4@!>n zne#1M-4vp}bA~PMzQPyp##!f2=(|EWrXZ_e+0Jdj>aVu)oe~>e-@$)LVauCfMO4;W zqVL#gb z2l;PQ)|0$Vww}zXi0bZXJ`y{*5GZWq-D7<}GQ1D;WBeSL&Z;yM z&d_+Y1Z1CcPX}X`cNu+s;DA1KK!42B{cHI)@ko-_=qSDo%0<%r3YGDHk?cs)xa^-S z*(an%U&H!N(A7L*1=@~WJ#j=XJLLazb7?!8;(VDB#weervqsvu5^z)be33pk(ptf* zSD;lRv)6>*OpOv|+BjHzj&j_hX|vyKcf?HCPlAwSNq7m%= zAb`n|VeS%1T%?fxF%g!=LSo{kLl-56LZXseyTU1T`T}!KveT>d|Djh<+id#jF~aciRV5rw~7(I*s~CEJPBz-_cYi8 z-JsW|g)^yBaKxf6j3l!^9ZF*7wi=dA= zut`OmSzU&I74*%*RNg3nR_Hi%L>=D)eYl9RGF88=$Nt0U=v6xgFu-2Sm_yYg(Dl&t z!DzuRpjShuzrgpWyb(C29-7>z#y9dRg9(L>M^8a)PW)nqty106w4$M4YE6muN@gYYj=Ur>^v zJI;gr3HXR$v`Xh53NBKofwHpjZQ*v=u+F5y%44hF!Ads>lQD0F)E90jLKM zBx?r9mZoU_*}`y_(uNbwa6sk_>1C?{I<}2!uL0~*+eBUfwT_hor2uVa6<`58fEy?Q z76Lec$X&`%FBHpW1&pmgvkrI)SOb_ve%1C|x~^%nisoF`QVvNU#G!U$s$vW9T&%XM z#qHbzUWoAp7F;P-3sj2yJeRXZ9g(Id)CSdM8X4Ijw&WFs&LeLmKUFylF3e>tN{p&7 zN{omvgNu;sE5wNGIx*67lNjIUN8%h*5@H;yJH*&_f*6tCBgT43Vx;a*;zjrzv(!LN z=ZLFus^Ya%hWN>;y!b%eocw%hh;sV%z@+}${>h=_=v2BrsA>0W+J`mmgPL})roDT< z9qOM9%!~fXE={{r(|%6VZqc-x&^EA>Q;ZG7Z_4s-ZUk#~KwHDV=o|y_E9fhuz6<%1 zKFFNcW+UDcZMurFgxSxN!OzUu7p#(g6L-opVe#{V;?ltf(MNqrzr{Ruyw%_@fH!v& zKT{^jGsi@}wVij19&5vjXCD}&?lD)ZxeuA|E5l)OUnr9bH-8YdO14dhT55y*%!=Sb zA{Q@VQyjad~F$KC60oCHtqbS(E#REYl5#R4rK%`(O7B5|6hh<$7PxjTM(; zJ@yrI#oHXzZ%N8-U34swJQ|boP26I~Da`>4;sskJuM&rB*Rta{ufqz&j)D<>Nm%UP z@%P0o`^!8OTT}Q3=jE|;McedztKcPjc%#@?a#uGu7u#97h3oD(V%1%ndAQj3ngHuq=npgU^B|z)|pZ;$hxrod$no z=nE=b(l<^#!ehmi6C7Q9SlKEy^$EN-ChVY?Cj?7(rqp bVzbX>RDLhTexJ)i6)lV_(j7bH)AN4-7CIW> delta 2613 zcma)8e@t6d6u!4VSW6g`@@oPcr9~KXKxt(g3Rv8Du%wes)XjvrnxKJX>K4(=IMdGX z$6VN$xhA5Kz>;cU64F_hppK=(#VjU9l+9@5kBT;egHR0#&9YIy^LT}4|MDbXzw_O5 z-+kwv-h1-=UH+~MJ@uyTj1lwhGNoVW1_@fI&Kj~6m#z&tB{Pk?V{h%vscdNG5sEs$mm&x7^I zYoDUautY$4jN%Q@`^9};l{11_9%a@q7&T@x)*u=+1>R&T1oIvXgls1PPm-#Dzpna@t<$Q z>28OnyF?qRf$mt>HUo2GKu4>=OziJ?TarE+d`EB51jja=*Lm4qOxg$3(QKFls0AJc z>H)Hc0UPib&O9s%|M z261R}8_&XTRV{}u0Ez%Iy2E7XS!}E9F@}CBH&j$vw$1p>#?x6w+$**dC?zH8(oOs! zaUeZUGt?knPS5oQP*2+3xWZQz_Jeb<%ICz$Fhq(eaPg@7E5j9&q}|W0@s&@O0`|MU zsLN=WxX`3?tpykYA1(z{<5_rM^L~D*P>Qdd7xkuA{-QW%s>wLGqz~99Y)u9q>h5!k zA4~;&msm8_9JDMIAX41qks}K@Sg|WbNG4mVm6$a}nvR8$l3qG_xm>bHCcH6y$=O*e z?LdTm&1^c!E`^&dQf#6%8n?$Lf|oK=xbYOOR5x%;d|@ubn|?D-r?xJDSw{!O4OrxW;V@nzw#tEO*_F z-!Zr<<{Q8#n?n){4MsAey?{GZsT>y`Q?|}p0w0ZC__q7m@ z=zK#m=lf#dPYsuYZ zF#0f}Z<}OW#!~+u!PTls&Rybqb&-+sCJcyqD9V~pA~GFCdN)>eiyDW`NP8xD#Pg0K zW8zJIanYG2K60eVHKV#MQ#(Fp^BQ0g^OHHggtVa0@uacS@ jEnDYI(+{I4D1_6dm%r}BYfhVyI*%VsvpsmxspbCyzpn$D diff --git a/libs/mips/libevdev_reader.so b/libs/mips/libevdev_reader.so index 85604e9258fa0dc87ea2066a2670331ba855014e..6a9a39790644a8aeebbc6f73988b7dd374db31ab 100755 GIT binary patch delta 1558 zcmZ8hU1%It6h3$MC%f6~W;VNRCO_@$n8Dq~l#UwPJR~^cgZ4$EC?rr!#E7XxTv4#l zlnheaM1q@m)TU5qij?L-*=>{32!lE890(U8L?ukGUc5_@b^5-HIZG;X>64sz5{z;g;0j)}@hL3`DfGy1&yNPT%oD66i zpnXvz>e8Xa&?!bgf@f-o*1*bs4%`RXt;o;AwJZF;{e>Oz8OYmNb;Kv(KOFkce~fx| z1PtzwClL_BE<<2dz=KG{|4@2!&6A91VXPa!*1G7Y?z9T+{XOY=}r#U zJQ|(5PjeWW;fiLh^jw);VL#xqmPL(ysNe(dnyv7hTPF z(n8*$`Mgbqd^cUschHr5hA!uc-kY?%Wh!d@lUAlkmP2ICcoe>u@>z3`XI*M1SI0Uz zgRZ0n#ckU=o3m1`CMaNUQqVTAW-DF3q+<5c?AWD0WjVl4uCbRsJ0obwNsyQ9K%kVm zP4w!ARtk5<_vNJJc$$@&)k+DwkX$DX1?Et64n^lsbPmPlP;3sx=R#EUxwMqFQiM3K z6o)Hn|0+qhJeStxLDHqvY>isG*H4yDq7{ilgdL@p@n6eBSGzb?^r^(nWY}D&9qmc| zCFLOO!{AZy9C!wN7rX#o+>){g9{*d)I$WW?f28aN4@xOV_-Mq`7B~5WNb{awHl=jo zNWHOC-+9p&qdTQ;?S(4DE0Gq_!M7t1i8XxNxT7v4-r>jU(mfrpZvaUoP|bsQcjy!C zV;}pcYR-#~0@Fclp*BWq-+uS~tsm}0)XQSS?>G1x^B3x_iT&G+tD-gZjpF(WH&)mL z$DkkPX#Jsm3qC@R68WK3jc^>S?!H8VzSG0P|5rMg+c zIp@Y=#mp_Bhed@VA(lx#y?KPS`TB!_pU#SMOVSK7FR{a->Y+e00y8vgRJ7A)yqOS0W)Dy zSOz9X0%pO+`3;fdjIjAL;TmJ`7%5j6=(S?)LO$7HoR$g z=M^l;gcHN0B>e;|$BEiN8E*h*!Tpdw1*xt57k_dfKL>uNs)_sz^mFRJ`em9ONO*RD zuOi_(3bew4`+zNMV=m;=1Nz4X_zTc=q4z`mL;s5}B-lFKvi z?BbW8Z|~yrb!!*@0KAo0|1|QQ;PlWTZbeskCU%r-u_3K?u2Jwh=OYLC!`Qg77&5zZ zwwmY5F-y$zkFiG#HS~9ai-i*Jj~_CwuJrTzo>$;m2|ewe=9Bog@#VXHP2Y1`-8QbD z?R&~S&7<1(vK@M)#-z<=k=C1e`l9L5=gmoKH4oCICehogUTupy%CS|i*deb($(wd4ZPyh82KjhtHsLss^|KOSM+;veBnG%?me&OqsdOMdajGuaRqZI$bUHE&0;ds zS5T;m;#Cx{qIea>t15LOCAwJX24n_-l2>T*$ccCQTbM*4m9PMJi`XAtdZ2bI2#({V ze+DiA?VTW411v!{}u8QCJie9+C2*FL*8O$l$k>-=7=U90^QXi^CKN8APB1!FQ z-~aF{y2(V?MLiXD?e%G+DcCm}_uRP(h|q03Bqq?264N1Ofl2U}*ch4Fe<4D+HW={A zE;|L3-6{(pL?$k43TX4mkr|QYk4N4dlLFbovTbFn%Jys}_&)OqWiiGnF~$v3(PG8^Zw%{`*bdsB`wr}Dnk9{fsPPC0RT`-n#PKx#r+OUU%~%~W294gM|d zXmVZBF0f`fnp~~4Q#@@sQ5y@l`57zM`_sw2`}`JEt=@X@W8iC+#haEMb+KZXzlHKO syh$r@YSdyqvmtObGC6UW|Hu?Xg^kfdbPF3c`9;JZA2mgrpC29n2lX8(z5oCK diff --git a/libs/x86/libevdev_reader.so b/libs/x86/libevdev_reader.so index f9ac6f6efab28b3c766576380f56899efbda7f72..7b7ed21496ba24dd1a72983920953df72a1c93d3 100755 GIT binary patch delta 1553 zcmZ9MZD?Cn7{|}KyEnOc@iu9?cG|S*+G~wAbk23{l!^Ho_AB55`WMi@F!fG_C+8Q!(bT1u z;J;@!VOA4)WQP)P(?MA+57S8**?i6|L<@|R3b(ilE~0*8N{ zqIJL{#8q0Bl~172Nu|h_(R0`0XCd}lR*x?N(&gVBK-1&ovBgix1!WuJ3pJ}HX z?DJ9BJ+=ecwE^3<_vR*09GyLMw-D*1nM;qwP`6Yw_X>5ps_Gj5+nzA>RKl#8OPDH# zIpb>SEmxKI*GC^yP!MsJdSG#otDUG5nFCe?3truLaVsX_CpRGWYo zPL!;DrfS7ZdvX!6u@Yu@;;WMJGjK0GY(}k>^vr$iE04Zapo*9YtJSmy&FE3I$E091 zBBEVuwmp^?gIB&paO{`dD`-9?U)YvvH^a`-&a!;8!fH45J4^GaT6sjUwfoT1y|d}T zdVxTNc~L%NtI338YEFlFYwr5T8Mc0Xp3U4zdvkA~cXakRE)^dI=12J;mgFk^;(6Sa z{*;GOv-bf+tIr#euhXbE()`h?ZC7$n+|b9A4kNJJ(Bp$>1uIaCidL%X0Z=;-wAlKoP4(v!i6hh1Tf z&IV delta 1353 zcmZ9MUuYCp6vpqJ%}Z!NW+Op^M7n`(k+LAIk%De4kqyMwhad}$ z5^1bW!gL$D$$9BR`_O_9ZC`@=5Z_Wlv1xtqA(W*JB~pQfN z+&SmWxo7X4#pGhLlt1!=E(A*x7$G4faL0gRHT7bF<*7ecz%@Ky!}GPdFWdZs2zE91 z-J$UFktsx_$S;p6>mE8OV=_e-q}e&<72*(*M1)uT4lckRsoR|hiPKGKwk-IBDArfM z#cJ9w#0))@?MLol*7ek%tErC&_%duYURwx>Kb-ylvkzZCp=?U^{K#;g=9FIgNF91D z4EG%n$`Cx~fj&GN*q*?CpA8g-+J$IZ5ncx9F8mO{U1)9uGAQ^hHI0s6_)5$LM)uUAH~aPossTixRB z6$@6Xn6>(g9u(jNv$#`+KbSW1YJ% z>BZ6 zHx&CX`Z4f|T&JyoDIZZw&{RTIIv9+#1`+1I5=o*^3DT?dZZM|wSLtIQSEX-)F*!ji z!M)lN+&`oqy@d=trtI9N{rbVKv2DkhL7W&cd{fGRq0cl77@=u(z}Rs`J7%PmJWcB{ zxkOiWQ!D-LIFq!Z?;Smd*(&z20jf_NC;E@$SYQs!fbWBO@Dp$xTmwG?qyIY2BA5fq z;B8Pvo*ZiH=X_uRoIqJO!0W?}?@1bK{GuoA-f6D1cACpLZ}@LSAJhg-;!N_*;9J2O zrER18%|W;XV2y)(vToxChgiG{o0+YX{n*Zde1As3mq5N9+*&>qIEkW6mzv&=@aN>| z_!;lLuhDN!t=B?>Ql{xd*z|Kc);L{)#V=)jPFKUGHj02zS_vooTr#VVw&1md8EcX{ zB4&WM%W@j%^+-%hV-smQ8%b#H*Nf&bb3b}?6SFevDbrod+z%c3n-dz}<5lWuPWZV~ M~L_Y_UOGlA0&PxRroWqA0Xx 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 LpRqHGp-J{HiqMw@