cool.io 1.9.3 → 1.9.4

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: 744af9f4092900f46b6db222fadf805f4fe107fb8f3c5c0a5c9661508d957ac5
4
- data.tar.gz: 594ae4eb024a1c4519ec912859126b5e739f52cc3bdfab1f93ae8fc9cbf7610f
3
+ metadata.gz: f15a89de41069e6ccb37eb28befd01d601851ae1bb9ee2a5081e1c26e0bcc8da
4
+ data.tar.gz: de69fe197c029bbb4438e2e1c751580712ecc1f1b8326803d2089b738d3f74cc
5
5
  SHA512:
6
- metadata.gz: 5b27d1af86f5647d9409b7b394d5ed9f2c85de9b68ab88d1d6363ca94aa05d84326f4feed754319f8409b371c53c61cb814292f7849618d806235b7e6de65007
7
- data.tar.gz: 58839f3800e0aa902f4c0b60b7b23eff2414cb1c34a14df688b318e4b1d31151ce7dfcc6a8e9d7b1d818d5160cf858b0a8a533ee5d1adf1c195d00baa7f50d43
6
+ metadata.gz: c88454501a2b042515b0571a729bac9a829ed7af72be377caf5ab6db08f90bb48adb1e19a69dee1b38eb1c77df9c084c88faa19d0077503c85a965e6c0c556ac
7
+ data.tar.gz: 8fd2af4f085bbb253df79cb8c9c685df97c5dc233f4be4891cef796120e9b265676e6fa4fe7c39b0b3b77447c000e41cbb1bc66b8939869e8747ac270619c436
@@ -12,6 +12,7 @@ jobs:
12
12
  continue-on-error: ${{matrix.experimental}}
13
13
 
14
14
  strategy:
15
+ fail-fast: false
15
16
  matrix:
16
17
  os:
17
18
  - ubuntu
@@ -26,20 +26,15 @@
26
26
 
27
27
  #define Watcher_Detach(watcher_type, watcher) \
28
28
  struct Coolio_Watcher *watcher_data; \
29
- struct Coolio_Loop *loop_data; \
30
29
  \
31
30
  watcher_data = Coolio_Watcher_ptr(watcher); \
32
31
  \
33
32
  if(watcher_data->loop == Qnil) \
34
33
  rb_raise(rb_eRuntimeError, "not attached to a loop"); \
35
34
  \
36
- if (watcher_data->enabled == 0) { \
37
- /* Ignore because watcher was already detached. */ \
38
- return Qnil; \
35
+ if (watcher_data->enabled) { \
36
+ rb_funcall(watcher, rb_intern("disable"), 0); \
39
37
  } \
40
- loop_data = Coolio_Loop_ptr(watcher_data->loop); \
41
- \
42
- ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type); \
43
38
  rb_call_super(0, 0)
44
39
 
45
40
  #define Watcher_Enable(watcher_type, watcher) \
@@ -66,10 +61,10 @@
66
61
  if(watcher_data->loop == Qnil) \
67
62
  rb_raise(rb_eRuntimeError, "not attached to a loop"); \
68
63
  \
69
- rb_call_super(0, 0); \
70
- \
71
- loop_data = Coolio_Loop_ptr(watcher_data->loop); \
72
- \
73
- ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type)
64
+ if (watcher_data->enabled) { \
65
+ loop_data = Coolio_Loop_ptr(watcher_data->loop); \
66
+ ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type); \
67
+ } \
68
+ rb_call_super(0, 0);
74
69
 
75
70
  #endif
@@ -1,5 +1,5 @@
1
1
  module Coolio
2
- VERSION = "1.9.3"
2
+ VERSION = "1.9.4"
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -47,4 +47,49 @@ describe Cool.io::Loop do
47
47
  end
48
48
  }.not_to raise_error
49
49
  end
50
+
51
+ class HttpHandler < Coolio::IO
52
+ RESPONSE = "HTTP/1.1 200 OK\r\nContent-Length: 1024\r\nConnection: close\r\n\r\n" + ("X" * 1024)
53
+
54
+ def on_connect
55
+ end
56
+
57
+ def on_read(data)
58
+ write(RESPONSE)
59
+ end
60
+
61
+ def on_write_complete
62
+ close
63
+ end
64
+ end
65
+
66
+ # https://github.com/socketry/cool.io/issues/89
67
+ it "does not cause memory leaks" do
68
+ port = 18989
69
+ loop = Coolio::Loop.default
70
+
71
+ server = Coolio::TCPServer.new('127.0.0.1', port, HttpHandler)
72
+ server.attach(loop)
73
+
74
+ event_thread = Thread.new { loop.run }
75
+
76
+ request = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n"
77
+
78
+ 10.times do |iteration|
79
+ begin
80
+ sock = TCPSocket.new('127.0.0.1', port)
81
+ sock.write(request)
82
+ sock.read
83
+ sock.close
84
+ rescue => e
85
+ sleep 0.01
86
+ retry
87
+ end
88
+ end
89
+
90
+ server.close
91
+ event_thread.join
92
+
93
+ expect(loop.watchers).to be_empty
94
+ end
50
95
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cool.io
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.3
4
+ version: 1.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  - !ruby/object:Gem::Version
170
170
  version: '0'
171
171
  requirements: []
172
- rubygems_version: 4.0.3
172
+ rubygems_version: 4.0.6
173
173
  specification_version: 4
174
174
  summary: A cool framework for doing high performance I/O in Ruby
175
175
  test_files: