sendfile 1.2.1 → 1.2.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.
- checksums.yaml +7 -0
- data/ext/extconf.rb +3 -1
- data/ext/sendfile.c +17 -11
- data/sendfile.gemspec +1 -1
- metadata +9 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 99bf77c10be057479085f39557a8d5a9e7a57ea1
|
4
|
+
data.tar.gz: 32f90f06d5a2df0f25f92e3a8215c9232f0c83f7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a65bce7d54943340d88b032142b308b4c1159de89b19c5f320860d1ca3815fb43e264b02d9fd22661debec1abab94f481c61325359db28e263efa60b86abf11
|
7
|
+
data.tar.gz: 7f528d7819de5e365e83337adccaa3c4f61e652eb6ba893837e43fd4e06e4ba62785ada754171ba4707e5dfa4d6962a8cf3e83c36f96406c1fa5a1fc1aa7013a
|
data/ext/extconf.rb
CHANGED
data/ext/sendfile.c
CHANGED
@@ -45,7 +45,17 @@
|
|
45
45
|
#include "config.h"
|
46
46
|
static VALUE sym_wait_writable;
|
47
47
|
|
48
|
-
#
|
48
|
+
#if defined(HAVE_RB_THREAD_CALL_WITHOUT_GVL) && defined(HAVE_RUBY_THREAD_H)
|
49
|
+
/* Ruby 2.0+ */
|
50
|
+
# include <ruby/thread.h>
|
51
|
+
typedef void * (*my_blocking_fn_t)(void*);
|
52
|
+
# define WITHOUT_GVL(fn,a) \
|
53
|
+
rb_thread_call_without_gvl((my_blocking_fn_t)(fn),(a),RUBY_UBF_IO,0)
|
54
|
+
#elif defined(HAVE_RB_THREAD_BLOCKING_REGION) /* Ruby 1.9 */
|
55
|
+
typedef VALUE (*my_blocking_fn_t)(void*);
|
56
|
+
# define WITHOUT_GVL(fn,a) \
|
57
|
+
rb_thread_blocking_region((my_blocking_fn_t)(fn),(a),RUBY_UBF_IO,0)
|
58
|
+
#else /* MRI 1.8 threads */
|
49
59
|
/*
|
50
60
|
* For non-natively threaded interpreters, do not monopolize the
|
51
61
|
* process and send in smaller chunks. 64K was chosen as it is
|
@@ -57,13 +67,9 @@ static VALUE sym_wait_writable;
|
|
57
67
|
|
58
68
|
/* (very) partial emulation of the 1.9 rb_thread_blocking_region under 1.8 */
|
59
69
|
# include <rubysig.h>
|
60
|
-
# define RUBY_UBF_IO ((rb_unblock_function_t *)-1)
|
61
|
-
typedef void rb_unblock_function_t(void *);
|
62
70
|
typedef VALUE rb_blocking_function_t(void *);
|
63
71
|
static VALUE
|
64
|
-
|
65
|
-
rb_blocking_function_t *fn, void *data1,
|
66
|
-
rb_unblock_function_t *ubf, void *data2)
|
72
|
+
WITHOUT_GVL(rb_blocking_function_t *fn, void *data1)
|
67
73
|
{
|
68
74
|
VALUE rv;
|
69
75
|
|
@@ -73,7 +79,9 @@ rb_thread_blocking_region(
|
|
73
79
|
|
74
80
|
return rv;
|
75
81
|
}
|
76
|
-
#
|
82
|
+
#endif /* WITHOUT_GVL definitions */
|
83
|
+
|
84
|
+
#ifndef MAX_SEND_SIZE
|
77
85
|
/*
|
78
86
|
* We can release the GVL and block as long as we need to.
|
79
87
|
* Limit this to the maximum ssize_t anyways, since 32-bit machines with
|
@@ -193,8 +201,7 @@ static off_t sendfile_full(struct sendfile_args *args)
|
|
193
201
|
off_t all = args->count;
|
194
202
|
|
195
203
|
while (1) {
|
196
|
-
rv = (ssize_t)
|
197
|
-
RUBY_UBF_IO, NULL);
|
204
|
+
rv = (ssize_t)WITHOUT_GVL(nogvl_sendfile, args);
|
198
205
|
if (!args->count)
|
199
206
|
break;
|
200
207
|
if (args->eof) {
|
@@ -222,8 +229,7 @@ static VALUE sendfile_nonblock(struct sendfile_args *args, int try)
|
|
222
229
|
rb_sys_fail("fcntl");
|
223
230
|
}
|
224
231
|
|
225
|
-
rv = (ssize_t)
|
226
|
-
RUBY_UBF_IO, NULL);
|
232
|
+
rv = (ssize_t)WITHOUT_GVL(nogvl_sendfile, args);
|
227
233
|
if (rv < 0) {
|
228
234
|
if (try && errno == EAGAIN)
|
229
235
|
return sym_wait_writable;
|
data/sendfile.gemspec
CHANGED
metadata
CHANGED
@@ -1,18 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendfile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Toby DiPasquale
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-06-28 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
|
-
description:
|
15
|
-
|
13
|
+
description: "Allows Ruby programs to access sendfile(2) functionality on \nany IO
|
14
|
+
object. Works on Linux, Solaris, FreeBSD and Darwin with\nblocking and non-blocking
|
16
15
|
sockets.\n"
|
17
16
|
email: toby@cbcg.net
|
18
17
|
executables: []
|
@@ -33,27 +32,26 @@ files:
|
|
33
32
|
- sendfile.gemspec
|
34
33
|
homepage: https://github.com/codeslinger/sendfile
|
35
34
|
licenses: []
|
35
|
+
metadata: {}
|
36
36
|
post_install_message:
|
37
37
|
rdoc_options: []
|
38
38
|
require_paths:
|
39
39
|
- lib
|
40
40
|
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
41
|
requirements:
|
43
|
-
- -
|
42
|
+
- - '>='
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: 1.8.0
|
46
45
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
-
none: false
|
48
46
|
requirements:
|
49
|
-
- -
|
47
|
+
- - '>='
|
50
48
|
- !ruby/object:Gem::Version
|
51
49
|
version: '0'
|
52
50
|
requirements: []
|
53
51
|
rubyforge_project: ruby-sendfile
|
54
|
-
rubygems_version:
|
52
|
+
rubygems_version: 2.0.14
|
55
53
|
signing_key:
|
56
|
-
specification_version:
|
54
|
+
specification_version: 4
|
57
55
|
summary: Ruby interface to sendfile(2) system call
|
58
56
|
test_files:
|
59
57
|
- test/test_sendfile.rb
|