Hi all,

I run into this problem with T5 when tring to add/remove/add a valve to the standard engine. -For what I understand an empty pipeline has:
basic = StandardEngineValve (For example);
first = null;

-If you add a valve you will get
basic = StandardEngineValve
first = myValve (with myValve.next = StandardEngineValve)

-If you remove the valve you will get
basic =StandardEngineValve
first = StandardEngineValve
Note that StandardEngineValve is in first too here.

-If I try to add a new valve given the actual code in addValve the valve will not be added because (see the **) current = basic and current.getNext() = null;

addValve(Valve valve) {
       // Add this Valve to the set associated with this Pipeline
       if (first == null) {
           first = valve;
           valve.setNext(basic);
       } else {
           Valve current = first;
           while (current != null) {
**                if (current.getNext() == basic) {
                   current.setNext(valve);
                   valve.setNext(basic);
                   break;
               }
               current = current.getNext();
           }
       }

   }


PATCH:
For what I understand the right patch will be in the removeValve method. We need to remove the basic valve when that the only one in the pipeline:

public void removeValve(Valve valve) {

       Valve current;
       if(first == valve) {
           first = first.getNext();
           current = null;
       } else {
           current = first;
       }
       while (current != null) {
           if (current.getNext() == valve) {
               current.setNext(valve.getNext());
               break;
           }
           current = current.getNext();
       }

        // PATCH: Empty the pipeline if only the basic valve is there
       if (first == basic) first == null;

       if (valve instanceof Contained)
           ((Contained) valve).setContainer(null);

       // Stop this valve if necessary
       if (started) {
           if (valve instanceof Lifecycle) {
               try {
                   ((Lifecycle) valve).stop();
               } catch (LifecycleException e) {
                   log.error("StandardPipeline.removeValve: stop: ", e);
               }
           }
           // Unregister the removed valave
           unregisterValve(valve);
       }
}

Hope that oki. I look the 5.5.17 code and the problem is still there. Is that the right way to submit a Patch. If I need to open a bug directly, let me know



Best Regard
/David


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to