event 0.4.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Binary file
data/ext/event/event.c CHANGED
@@ -19,6 +19,7 @@
19
19
  // THE SOFTWARE.
20
20
 
21
21
  #include "event.h"
22
+ #include "backend/backend.h"
22
23
 
23
24
  VALUE Event = Qnil;
24
25
  VALUE Event_Backend = Qnil;
@@ -32,6 +33,8 @@ void Init_event()
32
33
  Event = rb_define_module("Event");
33
34
  Event_Backend = rb_define_module_under(Event, "Backend");
34
35
 
36
+ Init_Event_Backend(Event_Backend);
37
+
35
38
  #ifdef EVENT_BACKEND_URING
36
39
  Init_Event_Backend_URing(Event_Backend);
37
40
  #endif
data/ext/event/event.h CHANGED
@@ -26,14 +26,14 @@
26
26
 
27
27
  void Init_event();
28
28
 
29
- #if HAVE_LIBURING_H
29
+ #ifdef HAVE_LIBURING_H
30
30
  #include "backend/uring.h"
31
31
  #endif
32
32
 
33
- #if HAVE_SYS_EPOLL_H
33
+ #ifdef HAVE_SYS_EPOLL_H
34
34
  #include "backend/epoll.h"
35
35
  #endif
36
36
 
37
- #if HAVE_SYS_EVENT_H
37
+ #ifdef HAVE_SYS_EVENT_H
38
38
  #include "backend/kqueue.h"
39
39
  #endif
data/ext/event/event.o CHANGED
Binary file
data/ext/event/extconf.h CHANGED
@@ -1,5 +1,4 @@
1
1
  #ifndef EXTCONF_H
2
2
  #define EXTCONF_H
3
- #define HAVE_LIBURING_H 1
4
- #define HAVE_SYS_EPOLL_H 1
3
+ #define HAVE_SYS_EVENT_H 1
5
4
  #endif
data/ext/event/extconf.rb CHANGED
@@ -30,9 +30,11 @@ dir_config(extension_name)
30
30
 
31
31
  $CFLAGS << " -Wall"
32
32
 
33
- $srcs = ["event.c"]
33
+ $srcs = ["event.c", "backend/backend.c"]
34
34
  $VPATH << "$(srcdir)/backend"
35
35
 
36
+ have_func('&rb_fiber_transfer')
37
+
36
38
  if have_library('uring') and have_header('liburing.h')
37
39
  $srcs << "backend/uring.c"
38
40
  end
Binary file
data/ext/event/mkmf.log CHANGED
@@ -1,6 +1,6 @@
1
- have_library: checking for -luring... -------------------- yes
1
+ have_func: checking for &rb_fiber_transfer()... -------------------- no
2
2
 
3
- "gcc -o conftest -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-linux -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wall conftest.c -L. -L/home/samuel/.rubies/ruby-3.0.1/lib -Wl,-rpath,/home/samuel/.rubies/ruby-3.0.1/lib -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/home/samuel/.rubies/ruby-3.0.1/lib -L/home/samuel/.rubies/ruby-3.0.1/lib -lruby-static -lz -lpthread -lrt -lrt -lgmp -ldl -lcrypt -lm -lm -lc"
3
+ "clang -fdeclspec -o conftest -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-darwin20 -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -pipe -Wall conftest.c -L. -L/Users/samuel/.rubies/ruby-3.0.1/lib -L/opt/local/lib -L. -fstack-protector-strong -L/opt/local/lib -lruby.3.0-static -framework Security -framework Foundation -lpthread -lgmp -ldl -lobjc "
4
4
  checked program was:
5
5
  /* begin */
6
6
  1: #include "ruby.h"
@@ -11,7 +11,11 @@ checked program was:
11
11
  6: }
12
12
  /* end */
13
13
 
14
- "gcc -o conftest -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-linux -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wall conftest.c -L. -L/home/samuel/.rubies/ruby-3.0.1/lib -Wl,-rpath,/home/samuel/.rubies/ruby-3.0.1/lib -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/home/samuel/.rubies/ruby-3.0.1/lib -L/home/samuel/.rubies/ruby-3.0.1/lib -lruby-static -lz -lpthread -lrt -lrt -lgmp -ldl -lcrypt -lm -luring -lm -lc"
14
+ "clang -fdeclspec -o conftest -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-darwin20 -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -pipe -Wall conftest.c -L. -L/Users/samuel/.rubies/ruby-3.0.1/lib -L/opt/local/lib -L. -fstack-protector-strong -L/opt/local/lib -lruby.3.0-static -framework Security -framework Foundation -lpthread -lgmp -ldl -lobjc "
15
+ conftest.c:14:76: error: use of undeclared identifier 'rb_fiber_transfer'
16
+ int t(void) { const volatile void *volatile p; p = (const volatile void *)&rb_fiber_transfer; return !p; }
17
+ ^
18
+ 1 error generated.
15
19
  checked program was:
16
20
  /* begin */
17
21
  1: #include "ruby.h"
@@ -27,27 +31,44 @@ checked program was:
27
31
  11:
28
32
  12: return !!argv[argc];
29
33
  13: }
30
- 14:
31
- 15: int t(void) { ; return 0; }
34
+ 14: int t(void) { const volatile void *volatile p; p = (const volatile void *)&rb_fiber_transfer; return !p; }
32
35
  /* end */
33
36
 
34
37
  --------------------
35
38
 
36
- have_header: checking for liburing.h... -------------------- yes
39
+ have_library: checking for -luring... -------------------- no
37
40
 
38
- "gcc -E -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-linux -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wall conftest.c -o conftest.i"
41
+ "clang -fdeclspec -o conftest -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-darwin20 -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -pipe -Wall conftest.c -L. -L/Users/samuel/.rubies/ruby-3.0.1/lib -L/opt/local/lib -L. -fstack-protector-strong -L/opt/local/lib -lruby.3.0-static -framework Security -framework Foundation -lpthread -lgmp -ldl -lobjc -luring "
42
+ ld: library not found for -luring
43
+ clang: error: linker command failed with exit code 1 (use -v to see invocation)
39
44
  checked program was:
40
45
  /* begin */
41
- 1: #include "ruby.h"
42
- 2:
43
- 3: #include <liburing.h>
46
+ 1: #include "ruby.h"
47
+ 2:
48
+ 3: /*top*/
49
+ 4: extern int t(void);
50
+ 5: int main(int argc, char **argv)
51
+ 6: {
52
+ 7: if (argc > 1000000) {
53
+ 8: int (* volatile tp)(void)=(int (*)(void))&t;
54
+ 9: printf("%d", (*tp)());
55
+ 10: }
56
+ 11:
57
+ 12: return !!argv[argc];
58
+ 13: }
59
+ 14:
60
+ 15: int t(void) { ; return 0; }
44
61
  /* end */
45
62
 
46
63
  --------------------
47
64
 
48
- have_header: checking for sys/epoll.h... -------------------- yes
65
+ have_header: checking for sys/epoll.h... -------------------- no
49
66
 
50
- "gcc -E -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-linux -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wall conftest.c -o conftest.i"
67
+ "clang -E -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-darwin20 -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -pipe -Wall conftest.c -o conftest.i"
68
+ conftest.c:3:10: fatal error: 'sys/epoll.h' file not found
69
+ #include <sys/epoll.h>
70
+ ^~~~~~~~~~~~~
71
+ 1 error generated.
51
72
  checked program was:
52
73
  /* begin */
53
74
  1: #include "ruby.h"
@@ -57,13 +78,9 @@ checked program was:
57
78
 
58
79
  --------------------
59
80
 
60
- have_header: checking for sys/event.h... -------------------- no
81
+ have_header: checking for sys/event.h... -------------------- yes
61
82
 
62
- "gcc -E -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-linux -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/home/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wall conftest.c -o conftest.i"
63
- conftest.c:3:10: fatal error: sys/event.h: No such file or directory
64
- 3 | #include <sys/event.h>
65
- | ^~~~~~~~~~~~~
66
- compilation terminated.
83
+ "clang -E -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/x86_64-darwin20 -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0/ruby/backward -I/Users/samuel/.rubies/ruby-3.0.1/include/ruby-3.0.0 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -O3 -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens -pipe -Wall conftest.c -o conftest.i"
67
84
  checked program was:
68
85
  /* begin */
69
86
  1: #include "ruby.h"
@@ -77,8 +94,7 @@ extconf.h is:
77
94
  /* begin */
78
95
  1: #ifndef EXTCONF_H
79
96
  2: #define EXTCONF_H
80
- 3: #define HAVE_LIBURING_H 1
81
- 4: #define HAVE_SYS_EPOLL_H 1
82
- 5: #endif
97
+ 3: #define HAVE_SYS_EVENT_H 1
98
+ 4: #endif
83
99
  /* end */
84
100
 
@@ -53,6 +53,67 @@ module Event
53
53
  @writable.delete(io) if remove_writable
54
54
  end
55
55
 
56
+ def io_read(fiber, io, buffer, offset, length)
57
+ buffer.force_encoding(Encoding::BINARY)
58
+
59
+ while length > 0
60
+ case result = io.read_nonblock(length, exception: false)
61
+ when :wait_readable
62
+ self.io_wait(fiber, io, READABLE)
63
+ when :wait_writable
64
+ self.io_wait(fiber, io, WRITABLE)
65
+ else
66
+ result.force_encoding(Encoding::BINARY)
67
+ buffer[offset, result.bytesize] = result
68
+
69
+ offset += result.bytesize
70
+ length -= result.bytesize
71
+ end
72
+ end
73
+ rescue EOFError
74
+ return nil
75
+ end
76
+
77
+ def io_write(fiber, io, buffer, offset, length)
78
+ buffer.force_encoding(Encoding::BINARY)
79
+
80
+ total = 0
81
+
82
+ while length > 0
83
+ chunk = buffer[offset, length]
84
+ case result = io.write_nonblock(chunk, exception: false)
85
+ when :wait_readable
86
+ self.io_wait(fiber, io, READABLE)
87
+ when :wait_writable
88
+ self.io_wait(fiber, io, WRITABLE)
89
+ else
90
+ offset += result
91
+ length -= result
92
+ total += result
93
+ end
94
+ end
95
+
96
+ return total
97
+ end
98
+
99
+ def process_wait(fiber, pid, flags)
100
+ r, w = IO.pipe
101
+
102
+ thread = Thread.new do
103
+ Process::Status.wait(pid, flags)
104
+ ensure
105
+ w.close
106
+ end
107
+
108
+ self.io_wait(fiber, r, READABLE)
109
+
110
+ return thread.value
111
+ ensure
112
+ r.close
113
+ w.close
114
+ thread&.kill
115
+ end
116
+
56
117
  def select(duration = nil)
57
118
  readable, writable, _ = ::IO.select(@readable.keys, @writable.keys, nil, duration)
58
119
 
@@ -69,7 +130,7 @@ module Event
69
130
  end
70
131
 
71
132
  ready.each do |fiber, events|
72
- fiber.transfer(events)
133
+ fiber.transfer(events) if fiber.alive?
73
134
  end
74
135
  end
75
136
  end
data/lib/event/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Event
2
- VERSION = "0.4.1"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-07 00:00:00.000000000 Z
11
+ date: 2021-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bake
@@ -74,22 +74,24 @@ extensions:
74
74
  extra_rdoc_files: []
75
75
  files:
76
76
  - ext/event/Makefile
77
+ - ext/event/backend.o
78
+ - ext/event/backend/backend.c
77
79
  - ext/event/backend/backend.h
78
80
  - ext/event/backend/epoll.c
79
81
  - ext/event/backend/epoll.h
80
82
  - ext/event/backend/kqueue.c
81
83
  - ext/event/backend/kqueue.h
84
+ - ext/event/backend/pidfd.c
82
85
  - ext/event/backend/uring.c
83
86
  - ext/event/backend/uring.h
84
- - ext/event/epoll.o
87
+ - ext/event/event.bundle
85
88
  - ext/event/event.c
86
89
  - ext/event/event.h
87
90
  - ext/event/event.o
88
- - ext/event/event.so
89
91
  - ext/event/extconf.h
90
92
  - ext/event/extconf.rb
93
+ - ext/event/kqueue.o
91
94
  - ext/event/mkmf.log
92
- - ext/event/uring.o
93
95
  - lib/event.rb
94
96
  - lib/event/backend.rb
95
97
  - lib/event/backend/select.rb
@@ -115,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
117
  - !ruby/object:Gem::Version
116
118
  version: '0'
117
119
  requirements: []
118
- rubygems_version: 3.3.0.dev
120
+ rubygems_version: 3.2.15
119
121
  signing_key:
120
122
  specification_version: 4
121
123
  summary: An event loop.
data/ext/event/epoll.o DELETED
Binary file
data/ext/event/event.so DELETED
Binary file
data/ext/event/uring.o DELETED
Binary file