root/opal/mca/event/libevent2022/libevent/test/test-time.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rand_int
  2. time_cb
  3. main

   1 /*
   2  * Copyright (c) 2002-2007 Niels Provos <provos@citi.umich.edu>
   3  * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions
   7  * are met:
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  * 2. Redistributions in binary form must reproduce the above copyright
  11  *    notice, this list of conditions and the following disclaimer in the
  12  *    documentation and/or other materials provided with the distribution.
  13  * 3. The name of the author may not be used to endorse or promote products
  14  *    derived from this software without specific prior written permission.
  15  *
  16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  21  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26  */
  27 #include "event2/event-config.h"
  28 
  29 #include <sys/types.h>
  30 #include <sys/stat.h>
  31 #include <fcntl.h>
  32 #include <stdlib.h>
  33 #include <stdio.h>
  34 #include <string.h>
  35 #ifndef WIN32
  36 #include <unistd.h>
  37 #include <sys/time.h>
  38 #endif
  39 #include <errno.h>
  40 
  41 #include "event2/event.h"
  42 #include "event2/event_compat.h"
  43 #include "event2/event_struct.h"
  44 
  45 int called = 0;
  46 
  47 #define NEVENT  20000
  48 
  49 struct event *ev[NEVENT];
  50 
  51 static int
  52 rand_int(int n)
  53 {
  54 #ifdef WIN32
  55         return (int)(rand() % n);
  56 #else
  57         return (int)(random() % n);
  58 #endif
  59 }
  60 
  61 static void
  62 time_cb(evutil_socket_t fd, short event, void *arg)
  63 {
  64         struct timeval tv;
  65         int i, j;
  66 
  67         called++;
  68 
  69         if (called < 10*NEVENT) {
  70                 for (i = 0; i < 10; i++) {
  71                         j = rand_int(NEVENT);
  72                         tv.tv_sec = 0;
  73                         tv.tv_usec = rand_int(50000);
  74                         if (tv.tv_usec % 2)
  75                                 evtimer_add(ev[j], &tv);
  76                         else
  77                                 evtimer_del(ev[j]);
  78                 }
  79         }
  80 }
  81 
  82 int
  83 main(int argc, char **argv)
  84 {
  85         struct timeval tv;
  86         int i;
  87 #ifdef WIN32
  88         WORD wVersionRequested;
  89         WSADATA wsaData;
  90 
  91         wVersionRequested = MAKEWORD(2, 2);
  92 
  93         (void) WSAStartup(wVersionRequested, &wsaData);
  94 #endif
  95 
  96         /* Initalize the event library */
  97         event_init();
  98 
  99         for (i = 0; i < NEVENT; i++) {
 100                 ev[i] = malloc(sizeof(struct event));
 101 
 102                 /* Initalize one event */
 103                 evtimer_set(ev[i], time_cb, ev[i]);
 104                 tv.tv_sec = 0;
 105                 tv.tv_usec = rand_int(50000);
 106                 evtimer_add(ev[i], &tv);
 107         }
 108 
 109         event_dispatch();
 110 
 111         return (called < NEVENT);
 112 }
 113 

/* [<][>][^][v][top][bottom][index][help] */