If select returns EINTR, recompute the expiration time and call it again
authorKen Raeburn <raeburn@mit.edu>
Fri, 13 Apr 2007 04:22:14 +0000 (04:22 +0000)
committerKen Raeburn <raeburn@mit.edu>
Fri, 13 Apr 2007 04:22:14 +0000 (04:22 +0000)
ticket: 5440
status: open

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19452 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/os/sendto_kdc.c

index 78bb419bdd22bb397b365b6c86b4b65081df1ebd..b133ec7d22376a0b4a1a5ed2aeef4d95bf5c8915 100644 (file)
@@ -497,6 +497,7 @@ krb5int_cm_call_select (const struct select_state *in,
     e = getcurtime(&now);
     if (e)
        return e;
+try_again:
     if (out->end_time.tv_sec == 0)
        timo = 0;
     else {
@@ -527,8 +528,11 @@ krb5int_cm_call_select (const struct select_state *in,
     else
        dprint(":%F\n", &out->rfds, &out->wfds, &out->xfds, out->max);
 
-    if (*sret < 0)
+    if (*sret < 0) {
+       if (e == EINTR)
+           goto try_again;
        return e;
+    }
     return 0;
 }