eventmachine 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 36a220365872f603cdcf0fa1d9ff74cb262f0e01
4
- data.tar.gz: f2c20894debc62a45a5369426bc470415e2ee68d
3
+ metadata.gz: c795c80fc92f16416a7a88c0f81047d0d016ed60
4
+ data.tar.gz: 53eef8509e66f01d28dcb5a19a52893bcec527cf
5
5
  SHA512:
6
- metadata.gz: cd3e24582a33fb6aae96d64b17c93140e9a9a20aad4b4f33f08f4c363ba20233e0e3188de70d1afe6f59d064dbc04721cc028cdfcc7ac37c1c516c4c1c7a972a
7
- data.tar.gz: 8a2bfebaa1e5c8867f31b8bfce064f18fff0e7d913f7d3ccd60f7b13e1cf2601d8ede8cf8fad0cafb1ddd35c8f3bbe7ba08c12a5b5ac178a68fc61d062c42523
6
+ metadata.gz: 83002fd70bd092a2b57b4ff6e1c451e6ad30a7e5d7dc29365139ad517ef417c09b1aa4655a8c220def9a0ffa32594c510ec2a547f195c1066aa610a4c515ee29
7
+ data.tar.gz: a9efa0f099ef1ec3d0ae7a87da91a1f768cc5f7995e9df7f5cce529018217e6a6277a263a42bf294dfa61625780a89afb613d3a08646e90d8391442b09e1148f
@@ -1,6 +1,11 @@
1
1
  # Changelog
2
2
 
3
- ## 1.2.2 (January 23, 2016)
3
+ ## 1.2.3 (February 22, 2017)
4
+ * Pure Ruby: Add get_sockname [#308, #772]
5
+ * Fix segfault when an Exception is raised from unbind callback [#765, #766]
6
+ * Allow destructors to throw when compiling in >= C++11 [#767]
7
+
8
+ ## 1.2.2 (January 23, 2017)
4
9
  * Java: Fix Fixnum deprecated warning in Ruby 2.4+ [#759]
5
10
  * Fix uncaught C++ exception in file watcher and raise InvalidSignature [#512, #757]
6
11
  * Fix connection count off-by-one for epoll and kqueue [#750]
@@ -116,7 +116,7 @@ Bindable_t::Bindable_t()
116
116
  Bindable_t::~Bindable_t
117
117
  ***********************/
118
118
 
119
- Bindable_t::~Bindable_t()
119
+ Bindable_t::~Bindable_t() NO_EXCEPT_FALSE
120
120
  {
121
121
  BindingBag.erase (Binding);
122
122
  }
@@ -21,6 +21,12 @@ See the file COPYING for complete licensing information.
21
21
  #define __ObjectBindings__H_
22
22
 
23
23
 
24
+ #if __cplusplus >= 201103L
25
+ #define NO_EXCEPT_FALSE noexcept(false)
26
+ #else
27
+ #define NO_EXCEPT_FALSE
28
+ #endif
29
+
24
30
  class Bindable_t
25
31
  {
26
32
  public:
@@ -30,7 +36,7 @@ class Bindable_t
30
36
 
31
37
  public:
32
38
  Bindable_t();
33
- virtual ~Bindable_t();
39
+ virtual ~Bindable_t() NO_EXCEPT_FALSE;
34
40
 
35
41
  const uintptr_t GetBinding() {return Binding;}
36
42
 
data/ext/ed.cpp CHANGED
@@ -126,7 +126,7 @@ EventableDescriptor::EventableDescriptor (SOCKET sd, EventMachine_t *em):
126
126
  EventableDescriptor::~EventableDescriptor
127
127
  *****************************************/
128
128
 
129
- EventableDescriptor::~EventableDescriptor()
129
+ EventableDescriptor::~EventableDescriptor() NO_EXCEPT_FALSE
130
130
  {
131
131
  if (NextHeartbeat)
132
132
  MyEventMachine->ClearHeartbeat(NextHeartbeat, this);
data/ext/ed.h CHANGED
@@ -37,7 +37,7 @@ class EventableDescriptor: public Bindable_t
37
37
  {
38
38
  public:
39
39
  EventableDescriptor (SOCKET, EventMachine_t*);
40
- virtual ~EventableDescriptor();
40
+ virtual ~EventableDescriptor() NO_EXCEPT_FALSE;
41
41
 
42
42
  SOCKET GetSocket() {return MySocket;}
43
43
  void SetSocketInvalid() { MySocket = INVALID_SOCKET; }
@@ -365,7 +365,7 @@ class PipeDescriptor: public EventableDescriptor
365
365
  {
366
366
  public:
367
367
  PipeDescriptor (SOCKET, pid_t, EventMachine_t*);
368
- virtual ~PipeDescriptor();
368
+ virtual ~PipeDescriptor() NO_EXCEPT_FALSE;
369
369
 
370
370
  virtual void Read();
371
371
  virtual void Write();
data/ext/em.cpp CHANGED
@@ -164,6 +164,8 @@ EventMachine_t::~EventMachine_t()
164
164
  {
165
165
  // Run down descriptors
166
166
  size_t i;
167
+ for (i = 0; i < DescriptorsToDelete.size(); i++)
168
+ delete DescriptorsToDelete[i];
167
169
  for (i = 0; i < NewDescriptors.size(); i++)
168
170
  delete NewDescriptors[i];
169
171
  for (i = 0; i < Descriptors.size(); i++)
@@ -840,6 +842,17 @@ void EventMachine_t::_CleanupSockets()
840
842
  EventableDescriptor *ed = Descriptors[i];
841
843
  assert (ed);
842
844
  if (ed->ShouldDelete()) {
845
+ DescriptorsToDelete.push_back(ed);
846
+ }
847
+ else
848
+ Descriptors [j++] = ed;
849
+ }
850
+ while ((size_t)j < Descriptors.size())
851
+ Descriptors.pop_back();
852
+
853
+ nSockets = DescriptorsToDelete.size();
854
+ for (i=0; i < nSockets; i++) {
855
+ EventableDescriptor *ed = DescriptorsToDelete[i];
843
856
  #ifdef HAVE_EPOLL
844
857
  if (Poller == Poller_Epoll) {
845
858
  assert (epfd != -1);
@@ -855,13 +868,9 @@ void EventMachine_t::_CleanupSockets()
855
868
  ModifiedDescriptors.erase(ed);
856
869
  }
857
870
  #endif
858
- delete ed;
859
- }
860
- else
861
- Descriptors [j++] = ed;
871
+ delete ed;
862
872
  }
863
- while ((size_t)j < Descriptors.size())
864
- Descriptors.pop_back();
873
+ DescriptorsToDelete.clear();
865
874
  }
866
875
 
867
876
  /*********************************
data/ext/em.h CHANGED
@@ -242,6 +242,7 @@ class EventMachine_t
242
242
  map<int, Bindable_t*> Pids;
243
243
  vector<EventableDescriptor*> Descriptors;
244
244
  vector<EventableDescriptor*> NewDescriptors;
245
+ vector<EventableDescriptor*> DescriptorsToDelete;
245
246
  set<EventableDescriptor*> ModifiedDescriptors;
246
247
 
247
248
  SOCKET LoopBreakerReader;
@@ -70,7 +70,7 @@ def pkg_config_wrapper(pretty_name, name)
70
70
  end
71
71
 
72
72
  if ENV['CROSS_COMPILING']
73
- openssl_version = ENV.fetch("OPENSSL_VERSION", "1.0.2j")
73
+ openssl_version = ENV.fetch("OPENSSL_VERSION", "1.0.2e")
74
74
  openssl_dir = File.expand_path("~/.rake-compiler/builds/openssl-#{openssl_version}/")
75
75
  if File.exist?(openssl_dir)
76
76
  FileUtils.mkdir_p Dir.pwd+"/openssl/"
@@ -46,7 +46,7 @@ PipeDescriptor::PipeDescriptor (int fd, pid_t subpid, EventMachine_t *parent_em)
46
46
  PipeDescriptor::~PipeDescriptor
47
47
  *******************************/
48
48
 
49
- PipeDescriptor::~PipeDescriptor()
49
+ PipeDescriptor::~PipeDescriptor() NO_EXCEPT_FALSE
50
50
  {
51
51
  // Run down any stranded outbound data.
52
52
  for (size_t i=0; i < OutboundPages.size(); i++)
@@ -214,6 +214,12 @@ module EventMachine
214
214
  selectable.get_peername
215
215
  end
216
216
 
217
+ # @private
218
+ def get_sockname sig
219
+ selectable = Reactor.instance.get_selectable( sig ) or raise "unknown get_sockname target"
220
+ selectable.get_sockname
221
+ end
222
+
217
223
  # @private
218
224
  def open_udp_socket host, port
219
225
  EvmaUDPSocket.create(host, port).uuid
@@ -657,6 +663,7 @@ class IO
657
663
  def_delegator :@my_selectable, :send_data
658
664
  def_delegator :@my_selectable, :schedule_close
659
665
  def_delegator :@my_selectable, :get_peername
666
+ def_delegator :@my_selectable, :get_sockname
660
667
  def_delegator :@my_selectable, :send_datagram
661
668
  def_delegator :@my_selectable, :get_outbound_data_size
662
669
  def_delegator :@my_selectable, :set_inactivity_timeout
@@ -716,6 +723,10 @@ module EventMachine
716
723
  nil
717
724
  end
718
725
 
726
+ def get_sockname
727
+ nil
728
+ end
729
+
719
730
  def set_inactivity_timeout tm
720
731
  @inactivity_timeout = tm
721
732
  end
@@ -847,6 +858,14 @@ module EventMachine
847
858
  io.getpeername
848
859
  end
849
860
 
861
+ # #get_sockname
862
+ # This is defined in the normal way on connected stream objects.
863
+ # Return an object that is suitable for passing to Socket#unpack_sockaddr_in or variants.
864
+ # We could also use a convenience method that did the unpacking automatically.
865
+ def get_sockname
866
+ io.getsockname
867
+ end
868
+
850
869
  # #get_outbound_data_size
851
870
  def get_outbound_data_size
852
871
  @outbound_q.inject(0) {|memo,obj| memo += (obj || "").length}
@@ -1,3 +1,3 @@
1
1
  module EventMachine
2
- VERSION = "1.2.2"
2
+ VERSION = "1.2.3"
3
3
  end
@@ -1,6 +1,13 @@
1
1
  require 'em_test_helper'
2
2
 
3
3
  class TestSomeExceptions < Test::Unit::TestCase
4
+ class DoomedConnectionError < StandardError
5
+ end
6
+ class DoomedConnection < EventMachine::Connection
7
+ def unbind
8
+ raise DoomedConnectionError
9
+ end
10
+ end
4
11
 
5
12
  # Read the commentary in EM#run.
6
13
  # This test exercises the ensure block in #run that makes sure
@@ -25,4 +32,12 @@ class TestSomeExceptions < Test::Unit::TestCase
25
32
  }
26
33
  end
27
34
 
35
+ def test_exception_on_unbind
36
+ assert_raises(DoomedConnectionError) {
37
+ EM.run {
38
+ EM.connect("localhost", 8888, DoomedConnection)
39
+ }
40
+ }
41
+ end
42
+
28
43
  end
metadata CHANGED
@@ -1,53 +1,53 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventmachine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francis Cianfrocca
8
8
  - Aman Gupta
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-01-23 00:00:00.000000000 Z
12
+ date: 2017-02-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: test-unit
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
17
  - - "~>"
19
18
  - !ruby/object:Gem::Version
20
19
  version: '2.0'
21
- type: :development
20
+ name: test-unit
22
21
  prerelease: false
22
+ type: :development
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '2.0'
28
28
  - !ruby/object:Gem::Dependency
29
- name: rake-compiler
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
33
  version: 0.9.5
35
- type: :development
34
+ name: rake-compiler
36
35
  prerelease: false
36
+ type: :development
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: 0.9.5
42
42
  - !ruby/object:Gem::Dependency
43
- name: rake-compiler-dock
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
45
  - - "~>"
47
46
  - !ruby/object:Gem::Version
48
47
  version: 0.5.1
49
- type: :development
48
+ name: rake-compiler-dock
50
49
  prerelease: false
50
+ type: :development
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
@@ -262,7 +262,7 @@ licenses:
262
262
  - Ruby
263
263
  - GPL-2.0
264
264
  metadata: {}
265
- post_install_message:
265
+ post_install_message:
266
266
  rdoc_options:
267
267
  - "--title"
268
268
  - EventMachine
@@ -285,9 +285,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
285
285
  - !ruby/object:Gem::Version
286
286
  version: '0'
287
287
  requirements: []
288
- rubyforge_project:
289
- rubygems_version: 2.5.1
290
- signing_key:
288
+ rubyforge_project:
289
+ rubygems_version: 2.6.8
290
+ signing_key:
291
291
  specification_version: 4
292
292
  summary: Ruby/EventMachine library
293
293
  test_files: