Hi

I have this subscriber and under windows (only place tested) version 4.2.2 and 
running it from a command line only I get an exception:

                KernelBase.dll!7649c54f()            Unknown            No 
symbols loaded.
               [Frames below may be incorrect and/or missing, no symbols loaded 
for KernelBase.dll]                   Annotated Frame
               hwclient_wait.exe!zmq::zmq_abort() Line 83       C++        
Symbols loaded.
>             hwclient_wait.exe!zmq::stream_engine_t::restart_input() Line 444  
>          C++        Symbols loaded.
               hwclient_wait.exe!zmq::session_base_t::write_activated() Line 
300          C++        Symbols loaded.
               hwclient_wait.exe!zmq::pipe_t::process_activate_write() Line 273 
           C++        Symbols loaded.
               hwclient_wait.exe!zmq::object_t::process_command() Line 82    
C++        Symbols loaded.
               hwclient_wait.exe!zmq::io_thread_t::in_event() Line 86 C++       
 Symbols loaded.
               hwclient_wait.exe!zmq::select_t::loop() Line 317               
C++        Symbols loaded.
               hwclient_wait.exe!zmq::select_t::worker_routine() Line 393       
  C++        Symbols loaded.
               hwclient_wait.exe!thread_routine() Line 46         C++        
Symbols loaded.
               msvcr100d.dll!_callthreadstartex() Line 314          C           
  Symbols loaded.
               msvcr100d.dll!_threadstartex(void * ptd) Line 297             C  
           Symbols loaded.
               kernel32.dll!75f4336a() Unknown            No symbols loaded.
               ntdll.dll!770098f2()          Unknown            No symbols 
loaded.
               ntdll.dll!770098c5()          Unknown            No symbols 
loaded.

The exception happens here  src\stream_engine.cpp

void zmq::stream_engine_t::restart_input ()
{
    zmq_assert (input_stopped);

As far as I can see the other place that calls restart_input does a check if 
input_stopped is set to true but the zmq::session_base_t::write_activated 
don't. My question is should it? Or am I doing something wrong in the code 
below.


My test subscriber:

#define ZMQ_STATIC

#include <conio.h>
#include <stdlib.h>
#include <iostream>

#include <string.h>
#include <string>
#include <zmq.hpp>
#include <zmq_addon.hpp>
#include <string>

using namespace std;

#define CATCH_ERROR_T                              \
   catch (zmq::error_t &e)                         \
   {                                               \
      printf("Exception caught: %s", e.what());    \
   }

int main()
{
   //  Prepare our context and socket
   try
   {
      zmq::context_t context(1);

      zmq::socket_t socket(context, ZMQ_SUB);
      try
      {
         socket.setsockopt(ZMQ_SUBSCRIBE, "", 0);
      }
      CATCH_ERROR_T;

      try
      {
         int hwm = 10;
         socket.setsockopt(ZMQ_RCVHWM, &hwm, sizeof(hwm));
      }
      CATCH_ERROR_T;

      try
      {
         int no = 250;
         socket.setsockopt(ZMQ_HEARTBEAT_IVL, &no, sizeof(no));
      }
      CATCH_ERROR_T;

      try
      {
         int no = 500;
         socket.setsockopt(ZMQ_HEARTBEAT_TIMEOUT, &no, sizeof(no));
      }
      CATCH_ERROR_T;

      std::cout << "Connecting to pub server!" << std::endl;
      try
      {
         socket.connect("tcp://localhost:5555");
      }
      CATCH_ERROR_T;

      Sleep(1000);

      int seq = 0;
      int last = -1;
      for (;;) {
         //  Get the reply.
         zmq::multipart_t sub;
         try
         {
            sub.recv(socket);
         }
         CATCH_ERROR_T;

         if (sub.size() == 2)
         {
            string t(static_cast<char *>(sub.at(0).data()), sub.at(0).size());
            memcpy(&seq, sub.at(1).data(), sizeof(seq));
            ++last;
            if (last != seq)
            {
               std::cout << "Sequence error last " << last << " Sequence: " << 
seq << std::endl;
               last = seq;
            }
            if (!(seq % 100000))
            {
               std::cout << "Type: " << t << " Sequence: " << seq << std::endl;
            }
         }
         else
         {
            std::cout << "Invalid format!" << std::endl;
         }
      }
   }
   CATCH_ERROR_T;

   return 0;
}

Jesper K


_______________________________________________
zeromq-dev mailing list
[email protected]
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to