<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi,<br>
      <br>
      I am back with the asserts happening inside a critical section in
      signaler.cpp.<br>
      The problem still is that in signale.cpp make_fdpair(..) creates
      system-wide critical section and does a number of things that can
      generate a wsa_assert() or win_assert() before releasing the
      session.<br>
      <br>
      I have seen that in the trunk someone has added a
      CloseHandle(sync) at the end of the function, I do not know if it
      had something related with this but I understand that the problem
      is still there. wsa_assert() and wsa_windows() end up in 
      RaiseException (0x40000015, EXCEPTION_NONCONTINUABLE, 1,
      extra_info) which I understand is a cul de sac that has no way out
      to clean up before leaving.<br>
      <br>
      I guess we need a special assert function to use inside this
      critical but I'd like a more documented opinion (Kiu?).<br>
      <br>
      thanks,<br>
      <br>
      Pau Ceano<br>
      <br>
      El 21/01/2013 23:37, KIU Shueng Chuan escribió:<br>
    </div>
    <blockquote
cite="mid:CAP2skc80xO4z=EJh728gD0jfysLHz=U6t3rq7jmypXrJx403WQ@mail.gmail.com"
      type="cite">
      <p dir="ltr">Hi Pau, a fix for the assertion on connection to port
        5905 is in trunk branch.</p>
      <p dir="ltr">I think the dangling critical section possibility
        could be fixed by changing the Event to a Mutex. When an
        assertion occurs the mutex would just be abandoned. However this
        change will cause backward compatibility issues with older
        versions.<br>
      </p>
      <div class="gmail_quote">On Jan 22, 2013 2:04 AM, "Pieter
        Hintjens" <<a moz-do-not-send="true"
          href="mailto:ph@imatix.com">ph@imatix.com</a>> wrote:<br
          type="attribution">
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">
          Hi Pau,<br>
          <br>
          So there are two different problems here, one is that we're
          hitting a<br>
          socket limit on WXP, and the other is that the asserts are
          happening<br>
          inside a critical section.<br>
          <br>
          I don't think we can fix the first one easily but we can
          presumably<br>
          assert in a smarter way. Do you want to try making a patch for
          this?<br>
          <br>
          -Pieter<br>
          <br>
          On Mon, Jan 21, 2013 at 6:23 PM, Pau <<a
            moz-do-not-send="true" href="mailto:pau@teleopsia.com">pau@teleopsia.com</a>>
          wrote:<br>
          ><br>
          > Hi,<br>
          ><br>
          ><br>
          > I am using (not yet in production) ZMQ on Windows and I
          have found what<br>
          > I think is a big problem for Windows users.<br>
          > We use WXP and W7 and Visual C++ different versions. ZMQ
          version 3.2.0<br>
          > (as far as I see the same problem happens in 3.2.2)<br>
          ><br>
          > I do not fully understand ZMQ internals but I've seen
          that every time a<br>
          > socket is created the function make_fdpair(..) is called
          and in<br>
          > signaler.cpp(line244) a system event
          "zmq-signaler-port-sync" is created.<br>
          > This event is used as a system-wide critical section and,
          so all<br>
          > applications that try to create an event will
          WaitForSingleObject (sync,<br>
          > INFINITE) until  SetEvent (...) is called.<br>
          > The problem is that the code between:<br>
          >   HANDLE sync = CreateEvent (NULL, FALSE, TRUE, TEXT<br>
          > ("zmq-signaler-port-sync"));<br>
          > and<br>
          > SetEvent (sync);<br>
          > is full of wsa_asserts(..) that will terminate the
          application if<br>
          > something goes wrong.<br>
          ><br>
          > It is clear that terminating the application not leaving
          the system-wide<br>
          > critical section is a bad idea because all applications
          in the system<br>
          > will hang and you will have to stop all them to start
          again.<br>
          > I understand that no errors should happen but anyway to
          escape from the<br>
          > error is not a good idea in this case.<br>
          ><br>
          > I do not know all possible reasons to generate a fatal
          wsa_assert(..)<br>
          > but there is at least one:<br>
          ><br>
          > I have seen that in XP it is possible that line 301  rc =
          connect (*w_,<br>
          > (sockaddr *) &addr, sizeof (addr)); returns an error
          when a socket tries<br>
          > to connect to 5905 and this has happened many times.<br>
          > Windows uses port numbers starting near 1400 and XP has a
          limit at 5000.<br>
          > In W7 this does not look as a problem because maximum is
          65000<br>
          > It sounds as if the number was big enough but apart from
          the fact that<br>
          > ZMQ uses a big number of connections (at least in my
          tests) I have<br>
          > experienced that Windows jumps port numbers by 7, so 5000
          happens<br>
          > sometimes with catastrophic consequences.<br>
          ><br>
          > best,<br>
          ><br>
          > Pau Ceano<br>
          > _______________________________________________<br>
          > zeromq-dev mailing list<br>
          > <a moz-do-not-send="true"
            href="mailto:zeromq-dev@lists.zeromq.org">zeromq-dev@lists.zeromq.org</a><br>
          > <a moz-do-not-send="true"
            href="http://lists.zeromq.org/mailman/listinfo/zeromq-dev"
            target="_blank">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a><br>
          _______________________________________________<br>
          zeromq-dev mailing list<br>
          <a moz-do-not-send="true"
            href="mailto:zeromq-dev@lists.zeromq.org">zeromq-dev@lists.zeromq.org</a><br>
          <a moz-do-not-send="true"
            href="http://lists.zeromq.org/mailman/listinfo/zeromq-dev"
            target="_blank">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a><br>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
zeromq-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:zeromq-dev@lists.zeromq.org">zeromq-dev@lists.zeromq.org</a>
<a class="moz-txt-link-freetext" href="http://lists.zeromq.org/mailman/listinfo/zeromq-dev">http://lists.zeromq.org/mailman/listinfo/zeromq-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>