While writing the patch, I noted that the current ircd
doesn't copy the timestamp of a JOIN when it is older.
It has to do this (and I added that to the patch)
because otherwise it is possible to create a desync
in the following way:

|A:00/00<3623>|B:00/00<3623>|C:00/00<3623>| State OK
               DESTRUCT
|A:00/00<3623>|B:     <none>|C:00/00<3623>| A<B:{DESTRUCT<3623>}; B>C:{DESTRUCT<3623>}
 JOIN
|A:01/01<3623>|B:     <none>|C:00/00<3623>| A>B:{8689 JOIN<3623>}; 
|A<B:{DESTRUCT<3623>}; B>C:{DESTRUCT<3623>}
                           B>C:{DESTRUCT<3623>}
|A:01/01<3623>|B:     <none>|C:     <none>| A>B:{8689 JOIN<3623>}; 
|A<B:{DESTRUCT<3623>}; B<C:{DESTRUCT<3623>}
 PART
|A:00/00<3623>|B:     <none>|C:     <none>| A>B:{8689 PART} {8689 JOIN<3623>}; 
|A<B:{DESTRUCT<3623>}; B<C:{DESTRUCT<3623>}
             A<B:{DESTRUCT<3623>}
|A:     <none>|B:     <none>|C:     <none>| A>B:{DESTRUCT<3623>} {8689 PART} {8689 
|JOIN<3623>}; B<C:{DESTRUCT<3623>}
                             CREATE<3624>
|A:     <none>|B:     <none>|C:01/01<3624>| A>B:{DESTRUCT<3623>} {8689 PART} {8689 
|JOIN<3623>}; B<C:{8690 CREATE<3624>} {DESTRUCT<3623>}
|A:     <none>|B:     <none>|C:01/01<3624>| A>B:{DESTRUCT<3623>} {8689 PART} {8689 
|JOIN<3623>}; B<C:{8690 CREATE<3624>}
             A>B:{8689 JOIN<3623>}
|A:     <none>|B:01/00<3623>|C:01/01<3624>| A>B:{DESTRUCT<3623>} {8689 PART}; 
|B>C:{8689 JOIN<3623>}; B<C:{8690 CREATE<3624>}
                           B>C:{8689 JOIN<3623>}
*** Here the JOIN should have set the TS to 3623 instead of leaving it at 3624 ***
|A:     <none>|B:01/00<3623>|C:02/01<3624>| A>B:{DESTRUCT<3623>} {8689 PART}; 
|B<C:{8690 CREATE<3624>}
             A>B:{8689 PART}
|A:     <none>|B:00/00<3623>|C:02/01<3624>| A>B:{DESTRUCT<3623>}; B>C:{8689 PART}; 
|B<C:{8690 CREATE<3624>}
                           B<C:{8690 CREATE<3624>}
|A:     <none>|B:01/00<3623>|C:02/01<3624>| A>B:{DESTRUCT<3623>}; A<B:{8690 
|JOIN<3623>}; B>C:{8689 PART}
                           B>C:{8689 PART}
|A:     <none>|B:01/00<3623>|C:01/01<3624>| A>B:{DESTRUCT<3623>}; A<B:{8690 JOIN<3623>}
             A<B:{8690 JOIN<3623>}
|A:01/00<3623>|B:01/00<3623>|C:01/01<3624>| A>B:{DESTRUCT<3623>}
             A>B:{DESTRUCT<3623>}
|A:01/00<3623>|B:01/00<3623>|C:01/01<3624>| A<B:{BURST<3623>8690}
             A<B:{BURST<3623>8690}
|A:01/00<3623>|B:01/00<3623>|C:01/01<3624>| State of C differs from state of A!

-- 
Carlo Wood <[EMAIL PROTECTED]>

Reply via email to