qa: update 660 to generate index.html, fixing pcp-testsuite runs
[pcp.git] / qa / src / slow_af.c
blobb866b5e4faf0f82afe556452b521bc2351b956c1
1 #include <pcp/pmapi.h>
2 #include <pcp/impl.h>
4 static struct timeval start;
6 #ifdef IS_MINGW
7 void pause(void) { SleepEx(INFINITE, TRUE); }
8 #endif
10 static int reg[4];
12 static void
13 printstamp(struct timeval *tp)
15 static struct tm *tmp;
16 time_t tt = (time_t)tp->tv_sec;
18 tmp = localtime(&tt);
19 fprintf(stderr, "%02d:%02d:%02d.%06d", tmp->tm_hour, tmp->tm_min, tmp->tm_sec, (int)tp->tv_usec);
22 void
23 onevent(int afid, void *data)
25 struct timeval now;
26 static int delay = -3;
27 int evnum;
28 double elapsed;
29 struct timeval sec = { 0, 0 };
31 gettimeofday(&now, NULL);
33 if (pmDebug & DBG_TRACE_AF) {
34 fprintf(stderr, "onevent(%d, " PRINTF_P_PFX "%p) called: ", afid, data);
35 printstamp(&now);
36 fputc('\n', stderr);
39 elapsed = __pmtimevalSub(&now, &start);
41 if (afid == reg[2])
42 printf("event %d callback\n", afid);
43 else {
44 if (afid == reg[0])
45 evnum = (int)(elapsed / 2.5);
46 else
47 evnum = (int)(elapsed / 1.5);
48 /* evnum not reliable for small elapsed intervals */
49 if (evnum >= 3)
50 printf("event %d callback #%d\n", afid, evnum);
51 else
52 printf("event %d callback #?\n", afid);
55 if (delay > 6) {
56 /* only report the unexpected */
57 if (__pmAFunregister(reg[0]) < 0)
58 printf("unregister %d failed\n", reg[0]);
59 if (__pmAFunregister(reg[1]) == 0)
60 printf("unregister %d success\n", reg[1]);
61 if (__pmAFunregister(reg[2]) == 0)
62 printf("unregister %d success\n", reg[2]);
63 if (__pmAFunregister(reg[3]) < 0)
64 printf("unregister %d failed\n", reg[0]);
65 exit(0);
67 if (delay > 0) {
69 * was sginap(delay * CLK_TCK) ... usleep() for
70 * delay*CLK_TCK*10^6/CLK_TCK microseconds so "delay" sec
72 sec.tv_sec = delay;
73 __pmtimevalSleep(sec);
75 delay++;
77 if (pmDebug & DBG_TRACE_AF) {
78 gettimeofday(&now, NULL);
79 fprintf(stderr, "onevent done: ");
80 printstamp(&now);
81 fputc('\n', stderr);
84 fflush(stderr);
85 fflush(stdout);
88 int
89 main(int argc, char **argv)
91 int c;
92 int sts;
93 int errflag = 0;
94 struct timeval delta = { 2, 500000 };
95 struct timeval now;
97 __pmSetProgname(argv[0]);
99 while ((c = getopt(argc, argv, "D:?")) != EOF) {
100 switch (c) {
102 case 'D': /* debug flag */
103 sts = __pmParseDebug(optarg);
104 if (sts < 0) {
105 fprintf(stderr, "%s: unrecognized debug flag specification (%s)\n",
106 pmProgname, optarg);
107 errflag++;
109 else
110 pmDebug |= sts;
111 break;
113 case '?':
114 default:
115 errflag++;
116 break;
120 if (errflag) {
121 fprintf(stderr,
122 "Usage: %s options ...\n\
124 Options\n\
125 -D debug standard PCP debug flag\n",
126 pmProgname);
127 exit(1);
130 __pmAFblock();
131 gettimeofday(&start, NULL);
132 reg[0] = __pmAFregister(&delta, NULL, onevent);
133 delta.tv_sec = 1;
134 reg[1] = __pmAFregister(&delta, NULL, onevent);
135 delta.tv_sec = 0;
136 delta.tv_usec = 0;
137 reg[2] = __pmAFregister(&delta, NULL, onevent);
138 delta.tv_sec = 60; /* will never fire */
139 reg[3] = __pmAFregister(&delta, NULL, onevent);
140 __pmAFunblock();
142 for ( ; ; ) {
143 fflush(stderr);
144 pause();
145 if (pmDebug & DBG_TRACE_AF) {
146 gettimeofday(&now, NULL);
147 fprintf(stderr, "returned from pause(): ");
148 printstamp(&now);
149 fputc('\n', stderr);