kgio 2.9.1 → 2.9.2

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.
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v2.9.1
4
+ DEF_VER=v2.9.2
5
5
 
6
6
  LF='
7
7
  '
@@ -13,7 +13,7 @@ static VALUE cKgio_Socket;
13
13
  static VALUE mSocketMethods;
14
14
  static VALUE iv_kgio_addr;
15
15
 
16
- #if defined(__linux__) && defined(KGIO_HAVE_THREAD_CALL_WITHOUT_GVL)
16
+ #if defined(__linux__) && defined(KGIO_WITHOUT_GVL)
17
17
  static int accept4_flags = SOCK_CLOEXEC;
18
18
  #else /* ! linux */
19
19
  static int accept4_flags = SOCK_CLOEXEC | SOCK_NONBLOCK;
@@ -79,7 +79,7 @@ static VALUE xaccept(void *ptr)
79
79
  return (VALUE)rv;
80
80
  }
81
81
 
82
- #ifdef KGIO_HAVE_THREAD_CALL_WITHOUT_GVL
82
+ #ifdef KGIO_WITHOUT_GVL
83
83
  # include <time.h>
84
84
  # include "blocking_io_region.h"
85
85
  static int thread_accept(struct accept_args *a, int force_nonblock)
@@ -89,7 +89,7 @@ static int thread_accept(struct accept_args *a, int force_nonblock)
89
89
  return (int)rb_thread_io_blocking_region(xaccept, a, a->fd);
90
90
  }
91
91
 
92
- #else /* ! KGIO_HAVE_THREAD_CALL_WITHOUT_GVL */
92
+ #else /* ! KGIO_WITHOUT_GVL */
93
93
  # include <rubysig.h>
94
94
  static int thread_accept(struct accept_args *a, int force_nonblock)
95
95
  {
@@ -106,7 +106,7 @@ static int thread_accept(struct accept_args *a, int force_nonblock)
106
106
  TRAP_END;
107
107
  return rv;
108
108
  }
109
- #endif /* ! KGIO_HAVE_THREAD_CALL_WITHOUT_GVL */
109
+ #endif /* ! KGIO_WITHOUT_GVL */
110
110
 
111
111
  static void
112
112
  prepare_accept(struct accept_args *a, VALUE self, int argc, const VALUE *argv)
@@ -1,4 +1,4 @@
1
- #ifdef KGIO_HAVE_THREAD_CALL_WITHOUT_GVL
1
+ #ifdef KGIO_WITHOUT_GVL
2
2
  # if defined(HAVE_RB_THREAD_IO_BLOCKING_REGION)
3
3
  /* temporary API for Ruby 1.9.3 */
4
4
  VALUE rb_thread_io_blocking_region(rb_blocking_function_t *, void *, int);
@@ -145,7 +145,7 @@ static const struct sockaddr *sockaddr_from(socklen_t *addrlen, VALUE addr)
145
145
  return NULL;
146
146
  }
147
147
 
148
- #if defined(MSG_FASTOPEN) && defined(KGIO_HAVE_THREAD_CALL_WITHOUT_GVL)
148
+ #if defined(MSG_FASTOPEN) && defined(KGIO_WITHOUT_GVL)
149
149
  #ifndef HAVE_RB_STR_SUBSEQ
150
150
  #define rb_str_subseq rb_str_substr
151
151
  #endif
@@ -383,7 +383,7 @@ void init_kgio_connect(void)
383
383
  rb_define_singleton_method(cKgio_Socket, "new", kgio_new, -1);
384
384
  rb_define_singleton_method(cKgio_Socket, "connect", kgio_connect, 1);
385
385
  rb_define_singleton_method(cKgio_Socket, "start", kgio_start, 1);
386
- #if defined(MSG_FASTOPEN) && defined(KGIO_HAVE_THREAD_CALL_WITHOUT_GVL)
386
+ #if defined(MSG_FASTOPEN) && defined(KGIO_WITHOUT_GVL)
387
387
  rb_define_method(cKgio_Socket, "kgio_fastopen", fastopen, 2);
388
388
  #endif
389
389
  /*
@@ -39,16 +39,16 @@ void kgio_autopush_send(VALUE);
39
39
 
40
40
  VALUE kgio_call_wait_writable(VALUE io);
41
41
  VALUE kgio_call_wait_readable(VALUE io);
42
- #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL)
43
- # define KGIO_HAVE_THREAD_CALL_WITHOUT_GVL 1
44
- typedef void *(*kgio_blocking_fn_t)(void*);
45
- # define rb_thread_blocking_region(fn,data1,ubf,data2) \
46
- rb_thread_call_without_gvl((kgio_blocking_fn_t)(fn),(data1),(ubf),(data2))
42
+ #if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) && defined(HAVE_RUBY_THREAD_H)
43
+ # define KGIO_WITHOUT_GVL(fn,data1,ubf,data2) \
44
+ rb_thread_call_without_gvl((fn),(data1),(ubf),(data2))
47
45
  #elif defined(HAVE_RB_THREAD_BLOCKING_REGION)
48
- # define KGIO_HAVE_THREAD_CALL_WITHOUT_GVL 1
46
+ typedef VALUE(*kgio_blocking_fn_t)(void*);
47
+ # define KGIO_WITHOUT_GVL(fn,data1,ubf,data2) \
48
+ rb_thread_blocking_region((kgio_blocking_fn_t)(fn),(data1),(ubf),(data2))
49
49
  #endif /* HAVE_RB_THREAD_CALL_WITHOUT_GVL || HAVE_RB_THREAD_BLOCKING_REGION */
50
50
 
51
- #if defined(KGIO_HAVE_THREAD_CALL_WITHOUT_GVL) && defined(HAVE_POLL)
51
+ #if defined(KGIO_WITHOUT_GVL) && defined(HAVE_POLL)
52
52
  # define USE_KGIO_POLL
53
53
  #endif /* USE_KGIO_POLL */
54
54
 
@@ -107,14 +107,16 @@ static void hash2pollfds(struct poll_args *a)
107
107
  rb_hash_foreach(a->ios, io_to_pollfd_i, (VALUE)a);
108
108
  }
109
109
 
110
- static VALUE nogvl_poll(void *ptr)
110
+ static void * nogvl_poll(void *ptr)
111
111
  {
112
112
  struct poll_args *a = ptr;
113
+ long n;
113
114
 
114
115
  if (a->timeout > 0)
115
116
  clock_gettime(hopefully_CLOCK_MONOTONIC, &a->start);
116
117
 
117
- return (VALUE)poll(a->fds, a->nfds, a->timeout);
118
+ n = poll(a->fds, a->nfds, a->timeout);
119
+ return (void *)n;
118
120
  }
119
121
 
120
122
  static VALUE poll_result(int nr, struct poll_args *a)
@@ -145,7 +147,7 @@ static VALUE do_poll(VALUE args)
145
147
 
146
148
  retry:
147
149
  hash2pollfds(a);
148
- nr = (long)rb_thread_blocking_region(nogvl_poll, a, RUBY_UBF_IO, NULL);
150
+ nr = (long)KGIO_WITHOUT_GVL(nogvl_poll, a, RUBY_UBF_IO, NULL);
149
151
  if (nr < 0) {
150
152
  if (interrupted()) {
151
153
  if (retryable(a)) {
@@ -33,23 +33,24 @@ struct open_args {
33
33
  # define rb_cloexec_open(p,f,m) open((p),(f),(m))
34
34
  #endif
35
35
 
36
- static VALUE nogvl_open(void *ptr)
36
+ static void * nogvl_open(void *ptr)
37
37
  {
38
38
  struct open_args *o = ptr;
39
+ long fd = (long)rb_cloexec_open(o->pathname, o->flags, o->mode);
39
40
 
40
- return (VALUE)rb_cloexec_open(o->pathname, o->flags, o->mode);
41
+ return (void *)fd;
41
42
  }
42
43
 
43
- #ifndef KGIO_HAVE_THREAD_CALL_WITHOUT_GVL
44
+ #ifndef KGIO_WITHOUT_GVL
44
45
  # define RUBY_UBF_IO ((void *)(-1))
45
46
  # include "rubysig.h"
46
- typedef void rb_unblock_function_t(void *);
47
- typedef VALUE rb_blocking_function_t(void *);
48
- static VALUE my_thread_blocking_region(
49
- rb_blocking_function_t *fn, void *data1,
50
- rb_unblock_function_t *ubf, void *data2)
47
+ typedef void my_unblock_function_t(void *);
48
+ typedef void *my_blocking_function_t(void *);
49
+ static void * my_thread_blocking_region(
50
+ my_blocking_function_t *fn, void *data1,
51
+ my_unblock_function_t *ubf, void *data2)
51
52
  {
52
- VALUE rv;
53
+ void *rv;
53
54
 
54
55
  TRAP_BEG; /* for FIFO */
55
56
  rv = fn(data1);
@@ -57,9 +58,9 @@ static VALUE my_thread_blocking_region(
57
58
 
58
59
  return rv;
59
60
  }
60
- #define rb_thread_blocking_region(fn,data1,ubf,data2) \
61
+ #define KGIO_WITHOUT_GVL(fn,data1,ubf,data2) \
61
62
  my_thread_blocking_region((fn),(data1),(ubf),(data2))
62
- #endif /* ! KGIO_HAVE_THREAD_CALL_WITHOUT_GVL */
63
+ #endif /* ! KGIO_WITHOUT_GVL */
63
64
 
64
65
  /*
65
66
  * call-seq:
@@ -107,7 +108,7 @@ static VALUE s_tryopen(int argc, VALUE *argv, VALUE klass)
107
108
  }
108
109
 
109
110
  retry:
110
- fd = (long)rb_thread_blocking_region(nogvl_open, &o, RUBY_UBF_IO, 0);
111
+ fd = (long)KGIO_WITHOUT_GVL(nogvl_open, &o, RUBY_UBF_IO, 0);
111
112
  if (fd < 0) {
112
113
  if (errno == EMFILE || errno == ENFILE || errno == ENOMEM) {
113
114
  rb_gc();
@@ -155,7 +155,7 @@ static VALUE kgio_trysend(VALUE io, VALUE str)
155
155
  # define kgio_trysend kgio_trywrite
156
156
  #endif /* ! USE_MSG_DONTWAIT */
157
157
 
158
- #if defined(KGIO_HAVE_THREAD_CALL_WITHOUT_GVL)
158
+ #if defined(KGIO_WITHOUT_GVL)
159
159
  # include "blocking_io_region.h"
160
160
  #ifdef MSG_DONTWAIT /* Linux only */
161
161
  # define MY_MSG_DONTWAIT (MSG_DONTWAIT)
@@ -256,7 +256,7 @@ void init_kgio_write(void)
256
256
  rb_define_method(mSocketMethods, "kgio_write", kgio_send, 1);
257
257
  rb_define_method(mSocketMethods, "kgio_trywrite", kgio_trysend, 1);
258
258
 
259
- #if defined(KGIO_HAVE_THREAD_CALL_WITHOUT_GVL)
259
+ #if defined(KGIO_WITHOUT_GVL)
260
260
  rb_define_method(mSocketMethods, "kgio_syssend", kgio_syssend, 2);
261
261
  #endif
262
262
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kgio
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.1
4
+ version: 2.9.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-05 00:00:00.000000000 Z
12
+ date: 2014-02-15 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'kgio provides non-blocking I/O methods for Ruby without raising
15
15