diff -r 26a682609ac2 vt/pack.go --- a/vt/pack.go Tue Apr 24 12:03:56 2012 -0600 +++ b/vt/pack.go Wed Jun 19 21:24:46 2013 +0300 @@ -6,8 +6,10 @@
//import "log" +const VtCorruptType = 0xFF + const ( - Overrtype = 0 + Overrtype = iota Ovroottype Ovdirtype Ovptype0 @@ -44,8 +46,8 @@ Ovroottype, } -var fromdisk = [...]int{ - -1, +var fromdisk = [...]uint8{ + VtCorruptType, RBlock, DirBlock, DirBlock + 1, @@ -55,33 +57,33 @@ DirBlock + 5, DirBlock + 6, DirBlock + 7, - -1, - -1, - -1, + VtCorruptType, + VtCorruptType, + VtCorruptType, DataBlock, } var Epacket *Error = &Error{"invalid packet"} var Eblktype *Error = &Error{"invalid block type"} -func fromDiskType(val uint8) int { +func fromDiskType(val uint8) uint8 { if int(val) > len(fromdisk) { - return -1 + return VtCorruptType } return fromdisk[val] } -func toDiskType(val uint8) int { +func toDiskType(val uint8) uint8 { if int(val) > len(todisk) { - return -1 + return VtCorruptType } - return int(todisk[val]) + return todisk[val] } func PackCall(buf []byte, id uint8, tag uint8, size int) (int, []byte) { - size += 2 + 1 + 1 // size[2] id[1] tag[1] + size += 2 + 1 + 1 // size[2] id[1] tag[1] if len(buf) < size { return -1, nil } @@ -108,7 +110,7 @@ func PackThello(buf []byte, tag uint8, version, uid string, strength uint8, crypto, codec []byte) int { sz, buf := PackCall(buf, Thello, tag, - 7+len(version)+len(uid)+len(crypto)+len(codec)) // vesion[s] uid[s] strength[1] crypto[n] codec[n] + 7+len(version)+len(uid)+len(crypto)+len(codec)) // vesion[s] uid[s] strength[1] crypto[n] codec[n] if buf == nil { return -1 } @@ -127,13 +129,13 @@ } func PackTread(buf []byte, tag uint8, score Score, btype uint8, count uint16) int { - sz, buf := PackCall(buf, Tread, tag, Scoresize+1+1+2) // score[20] type[1] pad[1] count[2] + sz, buf := PackCall(buf, Tread, tag, Scoresize+1+1+2) // score[20] type[1] pad[1] count[2] if buf == nil { return -1 } buf = Pscore(score, buf) - buf = Pint8(uint8(toDiskType(btype)), buf) + buf = Pint8(toDiskType(btype), buf) buf = Pint8(0, buf) Pint16(count, buf) @@ -141,12 +143,12 @@ } func PackTwrite(buf []byte, tag uint8, btype uint8, data []byte) int { - sz, buf := PackCall(buf, Twrite, tag, 1+3+len(data)) // type[1] pad[3] data + sz, buf := PackCall(buf, Twrite, tag, 1+3+len(data)) // type[1] pad[3] data if buf == nil { return -1 } - buf = Pint8(uint8(toDiskType(btype)), buf) + buf = Pint8(toDiskType(btype), buf) buf = Pint8(0, buf) buf = Pint16(0, buf) copy(buf, data) diff -r 26a682609ac2 vt/vtclnt/clnt.go --- a/vt/vtclnt/clnt.go Tue Apr 24 12:03:56 2012 -0600 +++ b/vt/vtclnt/clnt.go Wed Jun 19 21:24:46 2013 +0300 @@ -279,7 +279,8 @@ pos += n nreqs++ - clnt.ReqFree(req) + // req is freed in recv() if no Done channel was registered, or by the code calling <-Done. + //clnt.ReqFree(req) select { default: req = nil @@ -355,7 +356,7 @@ clnt = NewClnt(c) req := clnt.ReqAlloc() req.Done = make(chan *Req) - tc := req.Tc + tc := &req.Tc tc.Id = vt.Thello tc.Version = "02" tc.Uid = "anonymous" @@ -411,7 +412,7 @@ func (clnt *Clnt) Getnb(score vt.Score, btype uint8, count uint16, done chan *Req) (err *vt.Error) { req := clnt.ReqAlloc() req.Done = done - tc := req.Tc + tc := &req.Tc tc.Id = vt.Tread tc.Score = score tc.Btype = btype @@ -447,7 +448,7 @@ // Put is always async, Sync will make sure all Puts finished before returning func (clnt *Clnt) Put(btype uint8, data []byte) (score vt.Score, err *vt.Error) { req := clnt.ReqAlloc() - tc := req.Tc + tc := &req.Tc tc.Id = vt.Twrite tc.Btype = btype tc.Data = data @@ -466,7 +467,7 @@ done := make(chan *Req) req := clnt.ReqAlloc() req.Done = done - tc := req.Tc + tc := &req.Tc tc.Id = vt.Tsync err = clnt.Rpcnb(req) if err != nil { On Sat, Jul 6, 2013 at 1:52 PM, Pavel Zholkover <paulz...@gmail.com> wrote: > Hi all, > > Does anyone use the http://http://code.google.com/p/govt package for > client side venti ? > I had to apply the attached patch to be able to read a vac score. > > Thanks, > - Pavel