polyphony 0.43 → 0.43.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4eb88a97bf07f85f50aa46923883fce2fe1bbd253407021a6f5bb246e0fdcfdc
4
- data.tar.gz: c707861eb93f709661aa90abb33519004df5ff5db16f2d3da00387b292234027
3
+ metadata.gz: 8bb75fb77b087726e1ff77ed4f82331e9855467965e55bda8e64a6bc93a922b9
4
+ data.tar.gz: 7167af95b9a02463c81478d5f485c8dd33a14ce579b437580307554f1ad9b23e
5
5
  SHA512:
6
- metadata.gz: b554716ed26188fec86606198cdca669253d921017748ef0d9231db9f01e08e046b62fc38c0c6c3595a42f1976771db8b42c352c0431cc73f4b1ed64f7edf3c9
7
- data.tar.gz: 3ba74e7427fab47a65cd466e9bbe14e48176f737f6fd7fca21b3143d75d1dd9fa2ddef24b723d83f26f321949171359d946cfd4281b3b96c33bf43593199adce
6
+ metadata.gz: 6df70953e104c7742248532b2cb1eaa2a0e96867a0480614e5b4966381b53b0d19236a26f8eb3986fa4e59b10e1bd32ec2517d684d17dc820ef6f558b91e624c
7
+ data.tar.gz: 06e123256b1c1d66ecc4c02109341436b2c802f41358ce8531b89e64792c156435995c6fa2516b002921cf1db4679beb3a92449cc9ac5613e26d60642772cb56
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- polyphony (0.43)
4
+ polyphony (0.43.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -0,0 +1,10 @@
1
+
2
+ h1.logo-title {
3
+ font-size: 42px !important;
4
+ font-weight: bold;
5
+ }
6
+
7
+ h2.logo-title {
8
+ margin-top: 0.25em;
9
+ margin-bottom: 1em;
10
+ }
Binary file
@@ -6,7 +6,11 @@ permalink: /
6
6
  next_title: Installing Polyphony
7
7
  ---
8
8
 
9
- # Polyphony - fine-grained concurrency for Ruby
9
+ # Polyphony
10
+ {:.text-center .logo-title}
11
+
12
+ ## Fine-grained concurrency for Ruby
13
+ {:.text-center .logo-title}
10
14
 
11
15
  Polyphony is a library for building concurrent applications in Ruby. Polyphony
12
16
  implements a comprehensive
Binary file
@@ -7,11 +7,8 @@ ID ID_call;
7
7
  ID ID_caller;
8
8
  ID ID_clear;
9
9
  ID ID_each;
10
- ID ID_empty;
11
10
  ID ID_inspect;
12
11
  ID ID_new;
13
- ID ID_pop;
14
- ID ID_push;
15
12
  ID ID_raise;
16
13
  ID ID_ivar_running;
17
14
  ID ID_ivar_thread;
@@ -62,13 +59,10 @@ void Init_Polyphony() {
62
59
  ID_caller = rb_intern("caller");
63
60
  ID_clear = rb_intern("clear");
64
61
  ID_each = rb_intern("each");
65
- ID_empty = rb_intern("empty?");
66
62
  ID_inspect = rb_intern("inspect");
67
63
  ID_ivar_running = rb_intern("@running");
68
64
  ID_ivar_thread = rb_intern("@thread");
69
65
  ID_new = rb_intern("new");
70
- ID_pop = rb_intern("pop");
71
- ID_push = rb_intern("push");
72
66
  ID_raise = rb_intern("raise");
73
67
  ID_runnable = rb_intern("runnable");
74
68
  ID_runnable_value = rb_intern("runnable_value");
@@ -4,7 +4,6 @@ void Init_Fiber();
4
4
  void Init_Polyphony();
5
5
  void Init_LibevAgent();
6
6
  void Init_LibevQueue();
7
- void Init_Socket();
8
7
  void Init_Thread();
9
8
  void Init_Tracing();
10
9
 
@@ -16,7 +15,6 @@ void Init_polyphony_ext() {
16
15
  Init_LibevQueue();
17
16
 
18
17
  Init_Fiber();
19
- Init_Socket();
20
18
  Init_Thread();
21
19
 
22
20
  Init_Tracing();
@@ -1,14 +1,11 @@
1
1
  #include "polyphony.h"
2
2
 
3
3
  ID ID_deactivate_all_watchers_post_fork;
4
- ID ID_empty;
5
4
  ID ID_ivar_agent;
6
5
  ID ID_ivar_join_wait_queue;
7
6
  ID ID_ivar_main_fiber;
8
7
  ID ID_ivar_result;
9
8
  ID ID_ivar_terminated;
10
- ID ID_pop;
11
- ID ID_push;
12
9
  ID ID_run_queue;
13
10
  ID ID_runnable_next;
14
11
  ID ID_stop;
@@ -187,14 +184,11 @@ void Init_Thread() {
187
184
  rb_define_method(rb_cThread, "switch_fiber", Thread_switch_fiber, 0);
188
185
 
189
186
  ID_deactivate_all_watchers_post_fork = rb_intern("deactivate_all_watchers_post_fork");
190
- ID_empty = rb_intern("empty?");
191
187
  ID_ivar_agent = rb_intern("@agent");
192
188
  ID_ivar_join_wait_queue = rb_intern("@join_wait_queue");
193
189
  ID_ivar_main_fiber = rb_intern("@main_fiber");
194
190
  ID_ivar_result = rb_intern("@result");
195
191
  ID_ivar_terminated = rb_intern("@terminated");
196
- ID_pop = rb_intern("pop");
197
- ID_push = rb_intern("push");
198
192
  ID_run_queue = rb_intern("run_queue");
199
193
  ID_runnable_next = rb_intern("runnable_next");
200
194
  ID_stop = rb_intern("stop");
@@ -128,11 +128,11 @@ class ::TCPServer
128
128
 
129
129
  alias_method :orig_accept, :accept
130
130
  def accept
131
- @io ? @io.accept : orig_accept
131
+ @io.accept
132
132
  end
133
133
 
134
134
  alias_method :orig_close, :close
135
135
  def close
136
- @io ? @io.close : orig_close
136
+ @io.close
137
137
  end
138
138
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Polyphony
4
- VERSION = '0.43'
4
+ VERSION = '0.43.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.43'
4
+ version: 0.43.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-04 00:00:00.000000000 Z
11
+ date: 2020-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -267,6 +267,7 @@ files:
267
267
  - docs/assets/img/echo-fibers.svg
268
268
  - docs/assets/img/sleeping-fiber.svg
269
269
  - docs/faq.md
270
+ - docs/favicon.ico
270
271
  - docs/getting-started/index.md
271
272
  - docs/getting-started/installing.md
272
273
  - docs/getting-started/overview.md
@@ -278,6 +279,7 @@ files:
278
279
  - docs/main-concepts/extending.md
279
280
  - docs/main-concepts/fiber-scheduling.md
280
281
  - docs/main-concepts/index.md
282
+ - docs/polyphony-logo.png
281
283
  - examples/adapters/pg_client.rb
282
284
  - examples/adapters/pg_notify.rb
283
285
  - examples/adapters/pg_pool.rb
@@ -386,7 +388,6 @@ files:
386
388
  - ext/polyphony/polyphony.c
387
389
  - ext/polyphony/polyphony.h
388
390
  - ext/polyphony/polyphony_ext.c
389
- - ext/polyphony/socket.c
390
391
  - ext/polyphony/thread.c
391
392
  - ext/polyphony/tracing.c
392
393
  - lib/polyphony.rb
@@ -1,213 +0,0 @@
1
- #include "polyphony.h"
2
- #include <sys/socket.h>
3
-
4
- static VALUE cTCPSocket;
5
-
6
- ///////////////////////////////////////////////////////////////////////////
7
-
8
- struct rsock_send_arg {
9
- int fd, flags;
10
- VALUE mesg;
11
- struct sockaddr *to;
12
- socklen_t tolen;
13
- };
14
-
15
- #define StringValue(v) rb_string_value(&(v))
16
- #define IS_ADDRINFO(obj) rb_typeddata_is_kind_of((obj), &addrinfo_type)
17
-
18
- VALUE
19
- rsock_sockaddr_string_value(volatile VALUE *v)
20
- {
21
- // VALUE val = *v;
22
- // if (IS_ADDRINFO(val)) {
23
- // *v = addrinfo_to_sockaddr(val);
24
- // }
25
- StringValue(*v);
26
- return *v;
27
- }
28
-
29
- #define SockAddrStringValue(v) rsock_sockaddr_string_value(&(v))
30
- #define RSTRING_LENINT(str) rb_long2int(RSTRING_LEN(str))
31
- #ifndef RSTRING_SOCKLEN
32
- # define RSTRING_SOCKLEN (socklen_t)RSTRING_LENINT
33
- #endif
34
-
35
- #if defined __APPLE__
36
- # define do_write_retry(code) do {ret = code;} while (ret == -1 && errno == EPROTOTYPE)
37
- #else
38
- # define do_write_retry(code) ret = code
39
- #endif
40
-
41
- VALUE
42
- rsock_sendto_blocking(void *data)
43
- {
44
- struct rsock_send_arg *arg = data;
45
- VALUE mesg = arg->mesg;
46
- ssize_t ret;
47
- do_write_retry(sendto(arg->fd, RSTRING_PTR(mesg), RSTRING_LEN(mesg),
48
- arg->flags, arg->to, arg->tolen));
49
- return (VALUE)ret;
50
- }
51
-
52
- VALUE
53
- rsock_send_blocking(void *data)
54
- {
55
- struct rsock_send_arg *arg = data;
56
- VALUE mesg = arg->mesg;
57
- ssize_t ret;
58
- do_write_retry(send(arg->fd, RSTRING_PTR(mesg), RSTRING_LEN(mesg),
59
- arg->flags));
60
- return (VALUE)ret;
61
- }
62
-
63
- ///////////////////////////////////////////////////////////////////////////
64
-
65
- static VALUE BasicSocket_send(int argc, VALUE *argv, VALUE sock) {
66
- VALUE underlying_socket = rb_iv_get(sock, "@io");
67
- if (!NIL_P(underlying_socket)) sock = underlying_socket;
68
- struct rsock_send_arg arg;
69
- VALUE flags, to;
70
- rb_io_t *fptr;
71
- ssize_t n;
72
- rb_blocking_function_t *func;
73
- const char *funcname;
74
- VALUE agent = Qnil;
75
-
76
- rb_scan_args(argc, argv, "21", &arg.mesg, &flags, &to);
77
-
78
- StringValue(arg.mesg);
79
-
80
- if (!NIL_P(to)) {
81
- SockAddrStringValue(to);
82
- to = rb_str_new4(to);
83
- arg.to = (struct sockaddr *)RSTRING_PTR(to);
84
- arg.tolen = RSTRING_SOCKLEN(to);
85
- func = rsock_sendto_blocking;
86
- funcname = "sendto(2)";
87
- }
88
- else {
89
- func = rsock_send_blocking;
90
- funcname = "send(2)";
91
- }
92
- GetOpenFile(sock, fptr);
93
- rb_io_set_nonblock(fptr);
94
- arg.fd = fptr->fd;
95
- arg.flags = NUM2INT(flags);
96
- while ((n = (ssize_t)func(&arg)) < 0) {
97
- if (NIL_P(agent))
98
- agent = rb_ivar_get(rb_thread_current(), ID_ivar_agent);
99
- LibevAgent_wait_io(agent, sock, Qtrue);
100
- }
101
- return SSIZET2NUM(n);
102
- }
103
-
104
- static VALUE BasicSocket_recv(int argc, VALUE *argv, VALUE sock) {
105
- VALUE underlying_socket = rb_iv_get(sock, "@io");
106
- if (!NIL_P(underlying_socket)) sock = underlying_socket;
107
- long len = argc >= 1 ? NUM2LONG(argv[0]) : 8192;
108
- if (len < 0) {
109
- rb_raise(rb_eArgError, "negative length %ld given", len);
110
- }
111
-
112
- rb_io_t *fptr;
113
- long n;
114
- int shrinkable;
115
- VALUE agent = Qnil;
116
-
117
-
118
- VALUE str = argc >= 3 ? argv[2] : Qnil;
119
-
120
- shrinkable = io_setstrbuf(&str, len);
121
- OBJ_TAINT(str);
122
- GetOpenFile(sock, fptr);
123
- // rb_io_set_nonblock(fptr);
124
- rb_io_check_byte_readable(fptr);
125
-
126
- if (len == 0)
127
- return str;
128
-
129
- while (1) {
130
- n = recv(fptr->fd, RSTRING_PTR(str), len, MSG_DONTWAIT);
131
- if (n < 0) {
132
- int e = errno;
133
- if (e == EWOULDBLOCK || e == EAGAIN) {
134
- if (NIL_P(agent))
135
- agent = rb_ivar_get(rb_thread_current(), ID_ivar_agent);
136
- LibevAgent_wait_io(agent, sock, Qnil);
137
- }
138
- else
139
- rb_syserr_fail(e, strerror(e));
140
- // rb_syserr_fail_path(e, fptr->pathv);
141
- }
142
- else
143
- break;
144
- }
145
-
146
- io_set_read_length(str, n, shrinkable);
147
- io_enc_str(str, fptr);
148
-
149
- if (n == 0)
150
- return Qnil;
151
-
152
- return str;
153
- }
154
-
155
- static VALUE Socket_accept(VALUE sock) {
156
- rb_io_t *fptr;
157
- int fd;
158
- struct sockaddr addr;
159
- socklen_t len = (socklen_t)sizeof addr;
160
- VALUE agent = Qnil;
161
-
162
- GetOpenFile(sock, fptr);
163
- rb_io_set_nonblock(fptr);
164
-
165
- while (1) {
166
- fd = accept(fptr->fd, &addr, &len);
167
-
168
- if (fd < 0) {
169
- int e = errno;
170
- if (e == EWOULDBLOCK || e == EAGAIN) {
171
- if (NIL_P(agent))
172
- agent = rb_ivar_get(rb_thread_current(), ID_ivar_agent);
173
- LibevAgent_wait_io(agent, sock, Qnil);
174
- }
175
- else
176
- rb_syserr_fail(e, strerror(e));
177
- // rb_syserr_fail_path(e, fptr->pathv);
178
- }
179
- else {
180
- VALUE connection = rb_obj_alloc(cTCPSocket);
181
- rb_io_t *fp;
182
- MakeOpenFile(connection, fp);
183
- rb_update_max_fd(fd);
184
- fp->fd = fd;
185
- fp->mode = FMODE_READWRITE | FMODE_DUPLEX;
186
- rb_io_ascii8bit_binmode(connection);
187
- rb_io_set_nonblock(fp);
188
- rb_io_synchronized(fp);
189
- // if (rsock_do_not_reverse_lookup) {
190
- // fp->mode |= FMODE_NOREVLOOKUP;
191
- // }
192
-
193
- return connection;
194
- }
195
- }
196
- }
197
-
198
- void Init_Socket() {
199
- VALUE cBasicSocket;
200
- VALUE cSocket;
201
-
202
- rb_require("socket");
203
- cBasicSocket = rb_const_get(rb_cObject, rb_intern("BasicSocket"));
204
-
205
- rb_define_method(cBasicSocket, "send", BasicSocket_send, -1);
206
- rb_define_method(cBasicSocket, "recv", BasicSocket_recv, -1);
207
-
208
- cSocket = rb_const_get(rb_cObject, rb_intern("Socket"));
209
-
210
- // rb_define_method(cSocket, "accept", Socket_accept, 0);
211
-
212
- cTCPSocket = rb_const_get(rb_cObject, rb_intern("TCPSocket"));
213
- }