Eventmachine 0.12.10

I am happy to announce the release of eventmachine 0.12.10. Gems
(including
binary builds for win32 and jruby) have been uploaded to rubyforge and
should
be available via gem install shortly.

Since 0.12.8, we’ve had over 130 patches with numerous bug fixes,
improvements
and several new features. Highlights include:

  • Improved Performance

    • subclasses of EM::Connection are not created unless necessary
    • prevent unnecessary system calls to epoll_ctl/kevent
    • the reactor uses numeric signatures instead of strings,
      resulting in a ~15% overall performance boost
  • API Changes

    • EM.reactor_thread accessor for the reactor’s thread
    • EM.next_tick and EM.schedule are now thread-safe
    • EM::connect will raise a more better EM::ConnectionError with
      details
    • EM.epoll=/kqueue= will raise EM::Unsupported when unavailable
    • improved the cryptic “no timer” exception and increased the
      default limit to 10k timers
    • bugfix and improved performance for EM.current_time
    • EM.add_periodic_timer returns PeriodicTimer object
    • EM::Connection#get_sock_opt wrapper for getsockopt()
    • added EM.watch for notifications about file descriptors
      for notify_read/writable events, you cannot use EM.attach
      EM.watch(fd, Watcher){ |c| c.notify_readable = true }
    • EM::Connection#pending_connect_timeout= setter (defaults to 20s)
    • EM.bind_connect can bind to random source port using nil
      EM.bind_connect(‘local.ip’, nil, ‘remote.ip’, 1234)
    • added EM::Connection#pause/resume/paused? to pause and resume I/O
    • EM::Connection#proxy_incoming_to takes an optional buffer size for
      limiting RAM usage when dealing with slow clients
  • Protocol Additions

    • allow overriding the serializer used for ObjectProtocol
    • basic SOCKS v4 client protocol implementation
  • Platform Support
    AIX, OpenBSD, Solaris
    - minor fixes to support these platforms
    Windows
    - fix missing unbind events on refused outbound connections
    - fix issues with ruby 1.9 on windows

  • Ruby Support
    JRuby
    - major overhaul of the jruby reactor for better compat and
    performance
    - basic EM.attach/watch support on the Sun JVM
    - fully compatible with JRuby 1.4
    Ruby 1.9
    - fix bugs trying to kill the EM.defer threadpool
    - fix signal handling to catch ctrl+c and other signals
    gracefully
    Rubinius
    - minor changes to build a compatible C extension

Special thanks to the following people for making this release possible:

  • Bernd Ahlers
  • Chris Turner
  • Dan Mayer
  • Perry S.
  • Bill ‘spatulasnout’ Kelly
  • Hemant ‘gnufied’ Kumar
  • Jake ‘yakischloba’ Douglas
  • James ‘raggi’ Tucker
  • coderrr

The rdoc has been updated and is available at
http://eventmachine.rubyforge.org

Aman

Hi Aman,

I am struck with this wierd problem in windows when I am trying to use
the thin server for my RoR application developed in ruby 1.9.1p376
version and rails 2.3.5 version and I have been facing quite some
problems to get this up and running in my local box. i would like to
explain tehe various problems I had encounterd. FYI, I am going to host
my RoR application in a Windows server.

  1. no such file or directory - rubyeventmachine ==> require
    ‘rubyeventmachine’ in line no. 66 of the eventmachine.rb file.
    ==> Really couldn’t understand what this option should be changed to.
    Experimentally, had changed the ruby_eventmachine to pr_eventmachine and
    the symbol to :cascade option

  2. After changing to pr_eventmachine ==> No such file or directory :
    uuidgen (pr_event_machine)
    ==>After some googling, installed the Microsoft SDK which has the
    UUidgen.exe which can solve the problem. Hard coded the uuidgen with
    <PATH to the uuidgen.exe> and the server was getting started.

  3. The application starts fine, but fails with the error :
    G:/Softwares/Softwares/ruby-1.9.1/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.8-x86-mswin32-60/lib/pr_eventmachine.rb:587:in
    write_nonblock': A non-blocking socket operation could not be completed immediately. (Errno::EWOULDBLOCK) from G:/Softwares/Softwares/ruby-1.9.1/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.8-x86-mswin32-60/lib/pr_eventmachine.rb:587:in eventable_write’
    from
    G:/Softwares/Softwares/ruby-1.9.1/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.8-x86-mswin32-60/lib/pr_eventmachine.rb:371:in
    `block in crank_selectable
    s’

These things have been haunting me for quite some time. Please do
suggest me what a missing here, what option should I select in point
#1, and is there a rubyeventmachine.rb file to bedownloaded and included
in any of the directories?

FYI, My full gem list are given below.

actionmailer (2.3.5, 2.2.2)
actionpack (2.3.5, 2.2.2)
activerecord (2.3.5, 2.2.2)
activeresource (2.3.5, 2.2.2)
activesupport (2.3.8, 2.3.5, 2.2.2)
Ascii85 (1.0.0)
cgi_multipart_eof_fix (2.5.0)
color (1.4.1)
daemons (1.1.0, 1.0.3)
eventmachine (0.12.8 x86-mswin32-60)
fastthread (1.0.1 i386-mswin32)
gem_plugin (0.2.3)
guid (0.1.1)
gupshup (0.2.3)
hoe (2.6.1)
httpclient (2.1.5.2)
image_science (1.2.1)
json_pure (1.4.6)
log4r (1.1.7)
mysql (2.8.1 x86-mswin32)
paperclip (2.3.3)
pdf-reader (0.8.5)
pdf-writer (1.1.8)
rack (1.0.1)
rails (2.3.5, 2.2.2)
rake (0.8.7)
rubyforge (2.0.4)
rubygems-update (1.3.7)
thin (1.2.7 x86-mswin32)
transaction-simple (1.4.0)

And my gem environment is

RubyGems Environment:

  • RUBYGEMS VERSION: 1.3.7
  • RUBY VERSION: 1.9.1 (2009-12-07 patchlevel 376) [i386-mswin32]
  • INSTALLATION DIRECTORY:
    G:/Softwares/Softwares/ruby-1.9.1/lib/ruby/gems/1.9.
    1
  • RUBY EXECUTABLE: G:/Softwares/Softwares/ruby-1.9.1/bin/ruby.exe
  • EXECUTABLE DIRECTORY: G:/Softwares/Softwares/ruby-1.9.1/bin
  • RUBYGEMS PLATFORMS:
    • ruby
    • x86-mswin32-60
  • GEM PATHS:
    • G:/Softwares/Softwares/ruby-1.9.1/lib/ruby/gems/1.9.1
    • C:/Users/vaio/.gem/ruby/1.9.1
  • GEM CONFIGURATION:
  • REMOTE SOURCES:

Hope I will get some +ve reply with some quick fix to solve this issue.

Thanks and Regards,
Sandy

Aman G. wrote:

I am happy to announce the release of eventmachine 0.12.10. Gems
(including
binary builds for win32 and jruby) have been uploaded to rubyforge and
should
be available via gem install shortly.

Since 0.12.8, we’ve had over 130 patches with numerous bug fixes,
improvements
and several new features. Highlights include:

�- Improved Performance
� �- subclasses of EM::Connection are not created unless necessary
� �- prevent unnecessary system calls to epoll_ctl/kevent
� �- the reactor uses numeric signatures instead of strings,
� � �resulting in a ~15% overall performance boost

�- API Changes
� �- EM.reactor_thread accessor for the reactor’s thread
� �- EM.next_tick and EM.schedule are now thread-safe
� �- EM::connect will raise a more better EM::ConnectionError with
details
� �- EM.epoll=/kqueue= will raise EM::Unsupported when unavailable
� �- improved the cryptic “no timer” exception and increased the
� � �default limit to 10k timers
� �- bugfix and improved performance for EM.current_time
� �- EM.add_periodic_timer returns PeriodicTimer object
� �- EM::Connection#get_sock_opt wrapper for getsockopt()
� �- added EM.watch for notifications about file descriptors
� � � �for notify_read/writable events, you cannot use EM.attach
� � � �EM.watch(fd, Watcher){ |c| c.notify_readable = true }
� �- EM::Connection#pending_connect_timeout= setter (defaults to 20s)
� �- EM.bind_connect can bind to random source port using nil
� � � �EM.bind_connect(‘local.ip’, nil, ‘remote.ip’, 1234)
� �- added EM::Connection#pause/resume/paused? to pause and resume I/O
� �- EM::Connection#proxy_incoming_to takes an optional buffer size for
� � �limiting RAM usage when dealing with slow clients

�- Protocol Additions
� �- allow overriding the serializer used for ObjectProtocol
� �- basic SOCKS v4 client protocol implementation

�- Platform Support
� � �AIX, OpenBSD, Solaris
� � � �- minor fixes to support these platforms
� � �Windows
� � � �- fix missing unbind events on refused outbound connections
� � � �- fix issues with ruby 1.9 on windows

�- Ruby Support
� � �JRuby
� � � �- major overhaul of the jruby reactor for better compat and
performance
� � � �- basic EM.attach/watch support on the Sun JVM
� � � �- fully compatible with JRuby 1.4
� � �Ruby 1.9
� � � �- fix bugs trying to kill the EM.defer threadpool
� � � �- fix signal handling to catch ctrl+c and other signals
gracefully
� � �Rubinius
� � � �- minor changes to build a compatible C extension

Special thanks to the following people for making this release possible:
�- Bernd Ahlers
�- Chris Turner
�- Dan Mayer
�- Perry S.
�- Bill ‘spatulasnout’ Kelly
�- Hemant ‘gnufied’ Kumar
�- Jake ‘yakischloba’ Douglas
�- James ‘raggi’ Tucker
�- coderrr

The rdoc has been updated and is available at
http://eventmachine.rubyforge.org

�Aman

� �- EM::Connection#pending_connect_timeout= setter (defaults to 20s)

An excellent addition. And a much more sane default.

As a note with the devkit and mingw I get:

cmain.cpp: In function ‘int evma_send_file_data_to_connection(long
unsigned int, const char*)’:
cmain.cpp:752:6: error: cannot convert ‘stat*’ to ‘_stati64*’ for
argument ‘2’ to ‘int _fstati64(int, _stati64*)’
make.exe: *** [cmain.o] Error 1

Thanks!
-r