Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-1682

Multiple thread calling a Service function unsafely causes message corruption and terminates with Broken Pipe

    XMLWordPrintableJSON

Details

    Description

      If more than one thread attempts to send messages using the same Client instance, one of the threads corrupts another thread's parameter values and terminates program displaying Broken Pipe.

      If the Service function is locked with a Mutex, the issue stops occurring.

      See the following log fragment, displaying 'Unknown[*]', where '*' is a corrupt value.

      <log fragment>

      Thrift: Tue Aug 28 13:12:00 2012 TSimpleServer uncaught exception.
      virtual void FooHandler::bar(int32_t, zoo::StateType::type, zoo::WeekdayType::type): id: 0, state: Unknown[152587096], weekday: Unknown[152587096]
      Thrift: Tue Aug 28 13:12:00 2012 TSocket::write_partial() send() <Host: 127.0.0.1 Port: 9000>Broken pipe
      terminate called after throwing an instance of 'std::exception'
      what(): std::exception
      void FooPeer::bar(int32_t, zoo::StateType::type, zoo::WeekdayType::type): Exception: write() send(): Broken pipe
      void FooPeer::bar(int32_t, zoo::StateType::type, zoo::WeekdayType::type): id: 0, state: START, weekday: TUESDAY

      </log fragment>

      Please, check our sample code at 'BrokenPipeCpp_src.tar.gz' in order to reproduce this error.

      Regards,
      Felipe

      Attachments

        1. BrokenPipeCpp_src.tar.gz
          6 kB
          Felipe Toledo G Oliveira

        Activity

          People

            Unassigned Unassigned
            felipetgoliveira Felipe Toledo G Oliveira
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: