1. 26 Apr, 2012 1 commit
  2. 25 Apr, 2012 4 commits
  3. 24 Apr, 2012 4 commits
    • Martin Hurton's avatar
      Rename XREP/XREQ to ROUTER/DEALER in tests · 873abdd2
      Martin Hurton authored
      873abdd2
    • Martin Hurton's avatar
      xsub: fix memory leak · df5344bb
      Martin Hurton authored
      The implementation of the send call for XSUB socket failed
      to release and initialise empty message when duplicate
      subscription was detected.
      df5344bb
    • Ian Barber's avatar
      Merge pull request #322 from tranthamp/master · 016df8e8
      Ian Barber authored
      Atomic operations for armv7a
      016df8e8
    • Patrick Trantham's avatar
      Implement atomic operations for armv7a · 135fdab0
      Patrick Trantham authored
      This commit implements atomic operations for the armv7a architecture
      using gcc inline assembly.  This offers higher performance compared to
      pthread mutexes.
      
      Tested on an am3517 evm, clocked at 600MHz:
      
      ./inproc_thr 200 1000000
      ------------------------
      53-60K messages / sec, pthread mutexes
      73-90K messages / sec, assembly atomic ops
      
      ./inproc_lat 200 1000000
      ------------------------
      average latency: 42.234 [us], pthread mutexes
      average latency: 35.496 [us], assembly atomic ops
      135fdab0
  4. 21 Apr, 2012 9 commits
    • Pieter Hintjens's avatar
      Merge pull request #321 from shripchenko/master · c120f02d
      Pieter Hintjens authored
      add process_commands() to the beginning of zmq_connect() and zmq_bind()
      c120f02d
    • Sergey KHripchenko's avatar
      add process_commands() to the beginning of zmq_connect() and zmq_bind() · f858321c
      Sergey KHripchenko authored
      I believe there was a conception that zmq_connect() and zmq_bind() will be called
      only at the socket creation time and therefore don't need it.
      Now it is not true anymore.
      f858321c
    • Pieter Hintjens's avatar
      Merge pull request #320 from shripchenko/master · b9fb9198
      Pieter Hintjens authored
      ZMQ BUG FOUND + fixes for zmq_unbind() / zmq_disconnect() usage corner cases
      b9fb9198
    • Sergey KHripchenko's avatar
      fixes for zmq_unbind() / zmq_disconnect() usage corner cases · 057fab09
      Sergey KHripchenko authored
      1. when we call zmq_bind()/zmq_connect() to create endpoint
      we send ourselfs(through launch_child()) command to process_own(endpoint)
      (and add it to own_t::owned)
      in the application thread we could call zmq_unbind() / zmq_disconnect() _BEFORE_
      we run process_own() in ZMQ thread and in this situation we will be unable to find it in
      own_t::owned. in other words own_t::owned.find(endpoint) will not be deleted but it will be deleted from
      socket_base_t::endpoints.
      
      2. when you zmq_unbind() the lisnening TCP/IPC socket was terminated only in destructor...
      so the whole ZMQ_LINGER time listening TCP/IPC socket was able to accept() new connections
      but unable to handle them.
      
      this all geting even worse since unfortunately zmq has a bug and '*_listener_t' object not terminated
      untill the socket's zmq_close().
      AT LEAST FOR PUSH SOCKETS.
      Everything is ok for SUB sockets.
      
      Easy to reproduce without my fix:
      
      zmq_socket(PUSH)
      zmq_bind(tcp);
      // connect to  it from PULL socket
      zmq_unbind(tcp);
      
      sleep(forever)
      
      // netstat -anp | grep 'tcp listening socket'
      
      With my fix you could see that after zmq_unbind(tcp) all previously connected tcp sessions
      will not be finished untill the zmq_close(socket) regardless of ZMQ_LINGER value.
      
      (*_listener_t terminates all owned session_base_t(connect=false) and they call pipe_t::terminate()
      which in turn should call session_base_t::terminated() but this never happens)
      057fab09
    • Sergey KHripchenko's avatar
      added zmq_unbind() / zmq_disconnect() test script. · 4f668ad6
      Sergey KHripchenko authored
      it works but rises very serious questions.
      
      Please add license header by your choice.
      This file for 99% resemble crossroads-io/tests/shutdown.cpp
      4f668ad6
    • Sergey KHripchenko's avatar
      spaces deleted · 74ae19ac
      Sergey KHripchenko authored
      74ae19ac
    • Pieter Hintjens's avatar
      Merge pull request #319 from shripchenko/master · 952127df
      Pieter Hintjens authored
      fix for: [zeromq-dev] head builds again but two failing tests
      952127df
    • Sergey KHripchenko's avatar
      small wording change · 06b2eae8
      Sergey KHripchenko authored
      06b2eae8
    • Sergey KHripchenko's avatar
      stupid bug. I feel ashamed ^) · 2faa4c48
      Sergey KHripchenko authored
      2faa4c48
  5. 20 Apr, 2012 3 commits
  6. 19 Apr, 2012 1 commit
  7. 18 Apr, 2012 5 commits
  8. 17 Apr, 2012 2 commits
  9. 16 Apr, 2012 2 commits
  10. 13 Apr, 2012 2 commits
  11. 12 Apr, 2012 2 commits
    • Pieter Hintjens's avatar
      Merge pull request #311 from shripchenko/master · 525be518
      Pieter Hintjens authored
      Implement ZMQ_TCP_ACCEPT_FILTER setsockopt() for listening TCP sockets. 
      525be518
    • Sergey KHripchenko's avatar
      Implement ZMQ_TCP_ACCEPT_FILTER setsockopt() for listening TCP sockets. · acba6bdd
      Sergey KHripchenko authored
      Assign arbitrary number of filters that will be applied for each new TCP transport
      connection on a listening socket.
      If no filters applied, then TCP transport allows connections from any ip.
      If at least one filter is applied then new connection source ip should be matched.
      To clear all filters call zmq_setsockopt(socket, ZMQ_TCP_ACCEPT_FILTER, NULL, 0).
      Filter is a null-terminated string with ipv6 or ipv4 CIDR.
      
      For example:
      localhost
      127.0.0.1
      mail.ru/24
      ::1
      ::1/128
      3ffe:1::
      3ffe:1::/56
      
      Returns -1 if the filter couldn't be assigned(format error or ipv6 filter with ZMQ_IPV4ONLY set)
      
      P.S.
      The only thing that worries me is that I had to re-enable 'default assign by reference constructor/operator'
      for 'tcp_address_t' (and for my inherited class tcp_address_mask_t) to store it in std::vector in 'options_t'...
      acba6bdd
  12. 11 Apr, 2012 2 commits
    • Pieter Hintjens's avatar
      Merge pull request #309 from hurtonm/fix_issue_335 · e276df2b
      Pieter Hintjens authored
      Fix issue #335
      e276df2b
    • Martin Hurton's avatar
      Fix issue #335 · cfa6f4bf
      Martin Hurton authored
      The CreateEvent function requests EVENT_ALL_ACCESS access rights
      when the event object already exists. This causes problems
      when the event object is created from a service.
      The solution is to call OpenEvent function when the CreateEvent
      failed due to access control.
      The proper solution would be to use CreateEventEx function, but
      this one is not available on Windows XP.
      cfa6f4bf
  13. 10 Apr, 2012 3 commits