[BACK]Return to rumpclient.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / librumpclient

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/librumpclient/rumpclient.c between version 1.51.2.1 and 1.51.2.2

version 1.51.2.1, 2012/11/20 03:00:45 version 1.51.2.2, 2013/02/25 00:28:00
Line 48 
Line 48 
 #define USE_KQUEUE  #define USE_KQUEUE
 #endif  #endif
   
 #include <sys/cdefs.h>  
 __RCSID("$NetBSD$");  __RCSID("$NetBSD$");
   
 #include <sys/param.h>  #include <sys/param.h>
Line 66  __RCSID("$NetBSD$");
Line 65  __RCSID("$NetBSD$");
   
 #include <assert.h>  #include <assert.h>
 #include <dlfcn.h>  #include <dlfcn.h>
 #include <err.h>  
 #include <errno.h>  #include <errno.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <link.h>  
 #include <poll.h>  #include <poll.h>
 #include <pthread.h>  #include <pthread.h>
 #include <signal.h>  #include <signal.h>
Line 160  send_with_recon(struct spclient *spc, st
Line 157  send_with_recon(struct spclient *spc, st
   
                         /* check that we aren't over the limit */                          /* check that we aren't over the limit */
                         if (retrytimo > 0) {                          if (retrytimo > 0) {
                                 struct timeval tmp;                                  time_t tdiff;
   
                                 gettimeofday(&curtime, NULL);                                  gettimeofday(&curtime, NULL);
                                 timersub(&curtime, &starttime, &tmp);                                  tdiff = curtime.tv_sec - starttime.tv_sec;
                                 if (tmp.tv_sec >= retrytimo) {                                  if (starttime.tv_usec > curtime.tv_usec)
                                           tdiff--;
                                   if (tdiff >= retrytimo) {
                                         fprintf(stderr, "rump_sp: reconnect "                                          fprintf(stderr, "rump_sp: reconnect "
                                             "failed, %lld second timeout\n",                                              "failed, %lld second timeout\n",
                                             (long long)retrytimo);                                              (long long)retrytimo);
Line 795  doinit(void)
Line 794  doinit(void)
         return 0;          return 0;
 }  }
   
   #ifdef RTLD_NEXT
 void *rumpclient__dlsym(void *, const char *);  void *rumpclient__dlsym(void *, const char *);
 void *  void *
 rumpclient__dlsym(void *handle, const char *symbol)  rumpclient__dlsym(void *handle, const char *symbol)
Line 804  rumpclient__dlsym(void *handle, const ch
Line 804  rumpclient__dlsym(void *handle, const ch
 }  }
 void *rumphijack_dlsym(void *, const char *)  void *rumphijack_dlsym(void *, const char *)
     __attribute__((__weak__, alias("rumpclient__dlsym")));      __attribute__((__weak__, alias("rumpclient__dlsym")));
   #endif
   
 static pid_t init_done = 0;  static pid_t init_done = 0;
   
Line 837  rumpclient_init(void)
Line 838  rumpclient_init(void)
          * sag mir, wo die symbols sind.  zogen fort, der krieg beginnt.           * sag mir, wo die symbols sind.  zogen fort, der krieg beginnt.
          * wann wird man je verstehen?  wann wird man je verstehen?           * wann wird man je verstehen?  wann wird man je verstehen?
          */           */
   #ifdef RTLD_NEXT
 #define FINDSYM2(_name_,_syscall_)                                      \  #define FINDSYM2(_name_,_syscall_)                                      \
         if ((host_##_name_ = rumphijack_dlsym(RTLD_NEXT,                \          if ((host_##_name_ = rumphijack_dlsym(RTLD_NEXT,                \
             #_syscall_)) == NULL) {                                     \              #_syscall_)) == NULL) {                                     \
                 if (rumphijack_dlsym == rumpclient__dlsym)              \                  if (rumphijack_dlsym == rumpclient__dlsym)              \
                         host_##_name_ = _name_; /* static fallback */   \                          host_##_name_ = _name_; /* static fallback */   \
                 if (host_##_name_ == NULL)                              \                  if (host_##_name_ == NULL) {                            \
                         errx(1, "cannot find %s: %s", #_syscall_,       \                          fprintf(stderr,"cannot find %s: %s", #_syscall_,\
                             dlerror());                                 \                              dlerror());                                 \
                           exit(1);                                        \
                   }                                                       \
         }          }
   #else
   #define FINDSYM2(_name_,_syscall)                                       \
           host_##_name_ = _name_;
   #endif
 #define FINDSYM(_name_) FINDSYM2(_name_,_name_)  #define FINDSYM(_name_) FINDSYM2(_name_,_name_)
 #ifdef __NetBSD__  #ifdef __NetBSD__
         FINDSYM2(socket,__socket30)          FINDSYM2(socket,__socket30)
Line 1144  rumpclient_exec(const char *path, char *
Line 1152  rumpclient_exec(const char *path, char *
         return rv;          return rv;
 }  }
   
   /*
    * daemon() is handwritten for the benefit of platforms which
    * do not support daemon().
    */
 int  int
 rumpclient_daemon(int nochdir, int noclose)  rumpclient_daemon(int nochdir, int noclose)
 {  {
Line 1153  rumpclient_daemon(int nochdir, int noclo
Line 1165  rumpclient_daemon(int nochdir, int noclo
         if ((rf = rumpclient_prefork()) == NULL)          if ((rf = rumpclient_prefork()) == NULL)
                 return -1;                  return -1;
   
         if (daemon(nochdir, noclose) == -1) {          switch (fork()) {
                 sverrno = errno;          case 0:
                 rumpclient_fork_cancel(rf);                  break;
                 errno = sverrno;          case -1:
                 return -1;                  goto daemonerr;
           default:
                   _exit(0);
           }
   
           if (setsid() == -1)
                   goto daemonerr;
           if (!nochdir && chdir("/") == -1)
                   goto daemonerr;
           if (!noclose) {
                   int fd = open("/dev/null", O_RDWR);
                   dup2(fd, 0);
                   dup2(fd, 1);
                   dup2(fd, 2);
                   if (fd > 2)
                           close(fd);
         }          }
   
           /* note: fork is either completed or cancelled by the call */
         if (rumpclient_fork_init(rf) == -1)          if (rumpclient_fork_init(rf) == -1)
                 return -1;                  return -1;
   
         return 0;          return 0;
   
    daemonerr:
           sverrno = errno;
           rumpclient_fork_cancel(rf);
           errno = sverrno;
           return -1;
 }  }

Legend:
Removed from v.1.51.2.1  
changed lines
  Added in v.1.51.2.2

CVSweb <webmaster@jp.NetBSD.org>