@cryptotaxi247 / kubo / commits / 89cb43032

fix mirrorWriter write

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Jun 17, 2015 at 14:06 UTC 89cb430326137ba89745c948eb765163e1f8590f
1 file changed +20 -5
thirdparty/eventlog/writer.go
+20 -5
@@ -12,14 +12,29 @@ type MirrorWriter struct {
12
13 func (mw *MirrorWriter) Write(b []byte) (int, error) {
14 mw.lk.Lock()
15 - var filter []io.Writer
16 - for _, w := range mw.writers {
15 + // write to all writers, and nil out the broken ones.
16 + for i, w := range mw.writers {
17 _, err := w.Write(b)
18 - if err == nil {
19 - filter = append(filter, w)
18 + if err != nil {
19 + mw.writers[i] = nil
20 }
21 }
22 - mw.writers = filter
22 +
23 + // consolidate the slice
24 + for i := 0; i < len(mw.writers); i++ {
25 + if mw.writers[i] != nil {
26 + continue
27 + }
28 +
29 + j := len(mw.writers)
30 + for ; j > i; j-- {
31 + if mw.writers[j] != nil {
32 + mw.writers[i], mw.writers[j] = mw.writers[j], nil // swap
33 + break
34 + }
35 + }
36 + mw.writers = mw.writers[:j]
37 + }
38 mw.lk.Unlock()
39 return len(b), nil
40 }