> Quanah Gibson-Mount wrote: >> --On Saturday, September 05, 2009 5:58 PM +0200 John Miller >> <[email protected]> wrote: >> >>> Hi all, >>> I have noticed a problem with my program (which is supposed to generate >>> and receive many Posix signals ) and the function ldap_result(). It >>> happened to both my code and those library functions that used it (the >>> synchronous versions of various add/search/modify functions). >>> They all failed randomly with a "Can't contact LDAP server" error. I >>> tracked the issue down to the poll() function in os-ip.c : it's return >>> value is not checked to see if it has been interrupted by a signal. >>> Patching the library ( making the poll function to restart if errno == >>> EINTR after failure ), resolved my problem. >>> >>> Is it a bug or a choice? The patch is trivial, but if that error is not >>> checked by choice that should be documented imho. >> >> I would send a question like this to [email protected] > > And it would be ignored. This is the right list for this question. > > But the original poster appears to be confused. ldap_int_poll() clearly > checks > for EINTR already. > > -- > -- Howard Chu > CTO, Symas Corp. http://www.symas.com > Director, Highland Sun http://highlandsun.com/hyc/ > Chief Architect, OpenLDAP http://www.openldap.org/project/
If you have defined HAVE_POLL, ldap_int_select uses poll(). The only EINTR check I see on that error is one function away, but it works, if I am correct, if I use ldap_set_option() to set LDAP_OPT_RESTART to LDAP_OPT_ON. I can't check right nowif it solves my problem, though. Would it be the correct solution to make ldap_int_select restart? Cheers, JM
