rage-iodine 2.0.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/iodine/iodine_http.c +1 -1
- data/ext/iodine/scheduler.c +21 -4
- data/lib/iodine/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff8127ea56a3459eae3f01e41f5ec2b11b983d4c26733141ba008e91892b0ed8
|
4
|
+
data.tar.gz: fec97c38ebb1abcdb13fb7fdd96381c93e1d0d9f6b38017eb13ab7a349df396b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cc5c93fc4180649b61ca5e9d5e8e1b2bf60630b4b9893e6c9aa68439d07c78e750d3f51446eb89fb3809864a0841b975e8c3add2422e581a44799297dcf7088
|
7
|
+
data.tar.gz: 5434a1988b2f764cf285ac6d239c5c488d371b315944a5123fc397e9f0a98af9da8d4408c0adafb67b9ac2b1937ac175f13769a1ba36dac7477eada2270c4fdd
|
data/ext/iodine/iodine_http.c
CHANGED
@@ -569,7 +569,7 @@ static inline int ruby2c_response_send(iodine_http_request_handle_s *handle,
|
|
569
569
|
if (body && rb_respond_to(body, close_method_id))
|
570
570
|
IodineCaller.call(body, close_method_id);
|
571
571
|
body = Qnil;
|
572
|
-
handle->type =
|
572
|
+
handle->type = IODINE_HTTP_EMPTY;
|
573
573
|
return 0;
|
574
574
|
}
|
575
575
|
if (TYPE(body) == T_ARRAY) {
|
data/ext/iodine/scheduler.c
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#include "iodine_store.h"
|
3
3
|
#include "ruby.h"
|
4
4
|
|
5
|
+
#include <errno.h>
|
5
6
|
#include <stddef.h>
|
6
7
|
#include <stdint.h>
|
7
8
|
#include <stdio.h>
|
@@ -14,6 +15,7 @@
|
|
14
15
|
static ID call_id;
|
15
16
|
static uint8_t ATTACH_ON_READ_READY_CALLBACK;
|
16
17
|
static uint8_t ATTACH_ON_WRITE_READY_CALLBACK;
|
18
|
+
static VALUE timeout_args[1];
|
17
19
|
|
18
20
|
/* *****************************************************************************
|
19
21
|
Fiber Scheduler API
|
@@ -27,6 +29,7 @@ static void noop(intptr_t uuid, fio_protocol_s *protocol) {
|
|
27
29
|
typedef struct {
|
28
30
|
fio_protocol_s p;
|
29
31
|
VALUE block;
|
32
|
+
uint8_t fulfilled;
|
30
33
|
} scheduler_protocol_s;
|
31
34
|
|
32
35
|
|
@@ -41,11 +44,24 @@ static void iodine_scheduler_task_close(intptr_t uuid, fio_protocol_s *fio_proto
|
|
41
44
|
|
42
45
|
static void iodine_scheduler_task_perform(intptr_t uuid, fio_protocol_s *fio_protocol) {
|
43
46
|
scheduler_protocol_s *protocol = (scheduler_protocol_s *)fio_protocol;
|
44
|
-
|
47
|
+
|
48
|
+
if (!protocol->fulfilled) {
|
49
|
+
IodineCaller.call(protocol->block, call_id);
|
50
|
+
protocol->fulfilled = 1;
|
51
|
+
}
|
45
52
|
|
46
53
|
(void)uuid;
|
47
54
|
}
|
48
55
|
|
56
|
+
static void iodine_scheduler_task_timeout(intptr_t uuid, fio_protocol_s *fio_protocol) {
|
57
|
+
scheduler_protocol_s *protocol = (scheduler_protocol_s *)fio_protocol;
|
58
|
+
|
59
|
+
if (!protocol->fulfilled) {
|
60
|
+
IodineCaller.call2(protocol->block, call_id, 1, timeout_args);
|
61
|
+
protocol->fulfilled = 1;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
49
65
|
static VALUE iodine_scheduler_attach(VALUE self, VALUE r_fd, VALUE r_waittype, VALUE r_timeout) {
|
50
66
|
Check_Type(r_fd, T_FIXNUM);
|
51
67
|
int fd = FIX2INT(r_fd);
|
@@ -69,7 +85,7 @@ static VALUE iodine_scheduler_attach(VALUE self, VALUE r_fd, VALUE r_waittype, V
|
|
69
85
|
.p.on_data = iodine_scheduler_task_perform,
|
70
86
|
.p.on_ready = iodine_scheduler_task_perform,
|
71
87
|
.p.on_close = iodine_scheduler_task_close,
|
72
|
-
.p.ping =
|
88
|
+
.p.ping = iodine_scheduler_task_timeout,
|
73
89
|
.block = block,
|
74
90
|
};
|
75
91
|
} else if (waittype & ATTACH_ON_READ_READY_CALLBACK) {
|
@@ -77,7 +93,7 @@ static VALUE iodine_scheduler_attach(VALUE self, VALUE r_fd, VALUE r_waittype, V
|
|
77
93
|
.p.on_data = iodine_scheduler_task_perform,
|
78
94
|
.p.on_ready = noop,
|
79
95
|
.p.on_close = iodine_scheduler_task_close,
|
80
|
-
.p.ping =
|
96
|
+
.p.ping = iodine_scheduler_task_timeout,
|
81
97
|
.block = block,
|
82
98
|
};
|
83
99
|
} else if (waittype & ATTACH_ON_WRITE_READY_CALLBACK) {
|
@@ -85,7 +101,7 @@ static VALUE iodine_scheduler_attach(VALUE self, VALUE r_fd, VALUE r_waittype, V
|
|
85
101
|
.p.on_data = noop,
|
86
102
|
.p.on_ready = iodine_scheduler_task_perform,
|
87
103
|
.p.on_close = iodine_scheduler_task_close,
|
88
|
-
.p.ping =
|
104
|
+
.p.ping = iodine_scheduler_task_timeout,
|
89
105
|
.block = block,
|
90
106
|
};
|
91
107
|
}
|
@@ -161,6 +177,7 @@ Scheduler initialization
|
|
161
177
|
|
162
178
|
void iodine_scheduler_initialize(void) {
|
163
179
|
call_id = rb_intern2("call", 4);
|
180
|
+
timeout_args[0] = UINT2NUM(ETIMEDOUT);
|
164
181
|
|
165
182
|
VALUE SchedulerModule = rb_define_module_under(IodineModule, "Scheduler");
|
166
183
|
|
data/lib/iodine/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rage-iodine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boaz Segev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|