-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathemulator.c
108 lines (96 loc) · 2.14 KB
/
emulator.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
* emulator.c
*
* Created on: Jul 31, 2012
* Author: alexey
*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <errno.h>
#include "../src/data.h"
#include "../src/log.h"
#include "../src/governor_config.h"
#include "../src/governor_write_data.h"
#include "../src/governor_server.h"
#include "../src/tid_table.h"
#include "../src/parce_proc_fs.h"
int try = 0;
void *task(void *arg) {
int ret;
ret = send_info_begin("test1");
#ifdef TEST
printf("Send begin info %d, %d - return %d\n", sd->socket, sd->status, ret);
#endif
long rr = rand() % 20 + 1;
printf("Try %d will executing %ld\n", try, rr);
long diff = 0;
time_t t1 = time(NULL);
while (diff < rr) {
long iii = rr * 10000;
while (iii)
iii--;
diff = time(NULL) - t1;
}
printf("Try %d will executing %ld done\n", try, rr);
ret = send_info_end("test1");
#ifdef TEST
printf("Send begin info %d, %d- return %d\n",sd->socket, sd->status, ret);
#endif
return NULL;
}
int main() {
printf("Main daemon started\n");
pid_t pid = 0;
int chld_state;
config_init("../db-governor.xml.test");
if (open_log("test1.log")) {
printf("Can't open log file %d\n", errno);
}
if (open_restrict_log("test2.log")) {
printf("Can't open restrict log file %d\n", errno);
close_log();
}
print_config(get_config());
pid = fork();
if (pid < 0) {
return -1;
}
if (pid > 0) {
init_tid_table();
dbgov_init();
//Work cycle
create_socket();
get_data_from_client(NULL);
waitpid(pid, &chld_state, 0);
printf("Main daemon restart child\n");
}
if (pid == 0) {
close_log();
close_restrict_log();
connect_to_server();
sleep(5);
while (try < 3) {
try++;
int rr = rand() % 2 + 1;
pthread_t t1[rr];
int i = 0;
printf("Try %d Will start %d\n", try, rr);
for (i = 0; i < rr; i++) {
if (pthread_create(&t1[i], NULL, task, NULL) != 0) {
printf("Try %d - %d pthread_create() error\n", try, i);
} else {
printf("Try %d - %d pthread_create()\n", try, i);
}
}
for (i = 0; i < rr; i++) {
pthread_join(t1[i], NULL);
}
}
close_sock();
return 0;
}
close_log();
close_restrict_log();
printf("Main daemon terminated\n");
}