grpc
third_party
libuv
docs
code
queue-cancel
libuv/docs/code/queue-cancel/main.c
Go to the documentation of this file.
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <unistd.h>
4
5
#include <
uv.h
>
6
7
#define FIB_UNTIL 25
8
uv_loop_t
*
loop
;
9
uv_work_t
fib_reqs
[
FIB_UNTIL
];
10
11
long
fib_
(
long
t) {
12
if
(t == 0 || t == 1)
13
return
1;
14
else
15
return
fib_
(t-1) +
fib_
(t-2);
16
}
17
18
void
fib
(
uv_work_t
*
req
) {
19
int
n
= *(
int
*)
req
->data;
20
if
(random() % 2)
21
sleep(1);
22
else
23
sleep(3);
24
long
fib
=
fib_
(
n
);
25
fprintf(
stderr
,
"%dth fibonacci is %lu\n"
,
n
,
fib
);
26
}
27
28
void
after_fib
(
uv_work_t
*
req
,
int
status
) {
29
if
(
status
== UV_ECANCELED)
30
fprintf(
stderr
,
"Calculation of %d cancelled.\n"
, *(
int
*)
req
->data);
31
}
32
33
void
signal_handler
(
uv_signal_t
*
req
,
int
signum)
34
{
35
printf
(
"Signal received!\n"
);
36
int
i
;
37
for
(
i
= 0;
i
<
FIB_UNTIL
;
i
++) {
38
uv_cancel
((
uv_req_t
*) &
fib_reqs
[
i
]);
39
}
40
uv_signal_stop
(
req
);
41
}
42
43
int
main
() {
44
loop
=
uv_default_loop
();
45
46
int
data
[
FIB_UNTIL
];
47
int
i
;
48
for
(
i
= 0;
i
<
FIB_UNTIL
;
i
++) {
49
data
[
i
] =
i
;
50
fib_reqs
[
i
].data = (
void
*) &
data
[
i
];
51
uv_queue_work
(
loop
, &
fib_reqs
[
i
],
fib
,
after_fib
);
52
}
53
54
uv_signal_t
sig;
55
uv_signal_init
(
loop
, &sig);
56
uv_signal_start
(&sig,
signal_handler
, SIGINT);
57
58
return
uv_run
(
loop
,
UV_RUN_DEFAULT
);
59
}
fib
void fib(uv_work_t *req)
Definition:
libuv/docs/code/queue-cancel/main.c:18
main
int main()
Definition:
libuv/docs/code/queue-cancel/main.c:43
uv_signal_init
UV_EXTERN int uv_signal_init(uv_loop_t *loop, uv_signal_t *handle)
Definition:
unix/signal.c:317
printf
_Use_decl_annotations_ int __cdecl printf(const char *_Format,...)
Definition:
cs_driver.c:91
signal_handler
void signal_handler(uv_signal_t *req, int signum)
Definition:
libuv/docs/code/queue-cancel/main.c:33
status
absl::Status status
Definition:
rls.cc:251
uv_run
UV_EXTERN int uv_run(uv_loop_t *, uv_run_mode mode)
Definition:
unix/core.c:361
uv_queue_work
UV_EXTERN int uv_queue_work(uv_loop_t *loop, uv_work_t *req, uv_work_cb work_cb, uv_after_work_cb after_work_cb)
Definition:
threadpool.c:338
python_utils.port_server.stderr
stderr
Definition:
port_server.py:51
fib_reqs
uv_work_t fib_reqs[FIB_UNTIL]
Definition:
libuv/docs/code/queue-cancel/main.c:9
uv_default_loop
UV_EXTERN uv_loop_t * uv_default_loop(void)
Definition:
uv-common.c:733
req
static uv_connect_t req
Definition:
test-connection-fail.c:30
UV_RUN_DEFAULT
@ UV_RUN_DEFAULT
Definition:
uv.h:254
fib_
long fib_(long t)
Definition:
libuv/docs/code/queue-cancel/main.c:11
data
char data[kBufferLength]
Definition:
abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
FIB_UNTIL
#define FIB_UNTIL
Definition:
libuv/docs/code/queue-cancel/main.c:7
after_fib
void after_fib(uv_work_t *req, int status)
Definition:
libuv/docs/code/queue-cancel/main.c:28
uv_signal_stop
UV_EXTERN int uv_signal_stop(uv_signal_t *handle)
Definition:
unix/signal.c:511
n
int n
Definition:
abseil-cpp/absl/container/btree_test.cc:1080
uv.h
uv_signal_s
Definition:
uv.h:1561
loop
uv_loop_t * loop
Definition:
libuv/docs/code/queue-cancel/main.c:8
uv_loop_s
Definition:
uv.h:1767
uv_cancel
UV_EXTERN int uv_cancel(uv_req_t *req)
Definition:
threadpool.c:358
uv_work_s
Definition:
uv.h:1055
uv_req_s
Definition:
uv.h:404
if
if(p->owned &&p->wrapped !=NULL)
Definition:
call.c:42
i
uint64_t i
Definition:
abseil-cpp/absl/container/btree_benchmark.cc:230
uv_signal_start
UV_EXTERN int uv_signal_start(uv_signal_t *handle, uv_signal_cb signal_cb, int signum)
Definition:
unix/signal.c:338
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:17