Ignore:
Timestamp:
11/28/16 14:02:54 (7 years ago)
Author:
rlacroix
Message:

The workflow is now triggered when using xios_recv_field for fields in read mode received from the servers.

Previously the workflow was triggered upon receiving the data which could cause deadlocks since there are no garanties that clients are receiving data at the same time.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/filter/output_pin.hpp

    r637 r1006  
    22#define __XIOS_COutputPin__ 
    33 
     4#include "garbage_collector.hpp" 
    45#include "input_pin.hpp" 
    56 
     
    910   * An output pin handles the connections with downstream filters. 
    1011   */ 
    11   class COutputPin 
     12  class COutputPin : public InvalidableObject 
    1213  { 
    1314    public: 
     15      /*! 
     16       * Constructs an ouput pin with manual or automatic trigger 
     17       * and an associated garbage collector. 
     18       * 
     19       * \param gc the garbage collector associated with this ouput pin 
     20       * \param slotsCount the number of slots 
     21       */ 
     22      COutputPin(CGarbageCollector& gc, bool manualTrigger = false); 
     23 
    1424      /*! 
    1525       * Connects to a specific slot of the input pin of a downstream filter. 
     
    2131      void connectOutput(boost::shared_ptr<CInputPin> inputPin, size_t inputSlot); 
    2232 
     33      /*! 
     34       * Triggers the output of any buffered packet for the specified timestamp. 
     35       * 
     36       * \param timestamp the timestamp for which we are triggering the output 
     37       */ 
     38      void virtual trigger(Time timestamp); 
     39 
     40      /*! 
     41       * Tests if the pin can be triggered. 
     42       * 
     43       * \return true if the pin can be triggered 
     44       */ 
     45      bool virtual canBeTriggered() const; 
     46 
     47      /*! 
     48       * Removes all pending packets which are older than the specified timestamp. 
     49       * 
     50       * \param timestamp the timestamp used for invalidation 
     51       */ 
     52      void virtual invalidate(Time timestamp); 
     53 
    2354    protected: 
     55      /*! 
     56       * Function triggered when a packet is ready to be delivered. 
     57       * 
     58       * \param packet the packet ready for output 
     59       */ 
     60      void onOutputReady(CDataPacketPtr packet); 
     61 
     62      /*! 
     63       * Informs the downstream pins that this output pin should be triggered. 
     64       */ 
     65      void setOutputTriggers(); 
     66 
     67    private: 
    2468      /*! 
    2569       * Delivers an output packet to the downstreams filter. 
     
    2973      void deliverOuput(CDataPacketPtr packet); 
    3074 
    31     private: 
     75      CGarbageCollector& gc; //!< The garbage collector associated to the output pin 
     76 
     77      //!< Whether the ouput should be triggered manually 
     78      bool manualTrigger; 
     79 
    3280      //!< The list of connected filters and the corresponding slot numbers 
    3381      std::vector<std::pair<boost::shared_ptr<CInputPin>, size_t> > outputs; 
     82 
     83      //! Output buffer, store the packets until the output is triggered 
     84      std::map<Time, CDataPacketPtr> outputPackets; 
    3485  }; // class COutputPin 
    3586} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.