diff --git a/lib/fed/decoder.go b/lib/fed/decoder.go
index 6aa011b05a8ed25dec2ed7af60f1c3560f5d646d..b61aeb8d263ef1295558ce2da964db5cc25ddce0 100644
--- a/lib/fed/decoder.go
+++ b/lib/fed/decoder.go
@@ -28,6 +28,21 @@ func NewDecoder(r io.Reader) *Decoder {
return d
}
+func (T *Decoder) Read(b []byte) (n int, err error) {
+ rem := T.len - T.pos
+ if rem == 0 {
+ err = io.EOF
+ return
+ }
+ if len(b) > rem {
+ n, err = T.Reader.Read(b[:rem])
+ } else {
+ n, err = T.Reader.Read(b)
+ }
+ T.pos += n
+ return
+}
+
func (T *Decoder) ReadByte() (byte, error) {
if T.pos != T.len {
_, err := T.Reader.Discard(T.len - T.pos)
diff --git a/lib/fed/packet.go b/lib/fed/packet.go
index f521436fa842df6d07a214728d1d3c0e180ebe5b..6da6f2bf682c0ad77fe192ae2fc078275d728519 100644
--- a/lib/fed/packet.go
+++ b/lib/fed/packet.go
@@ -1,7 +1,5 @@
package fed
-import "io"
-
type Packet interface {
Type() Type
Length() int
@@ -28,17 +26,12 @@ func (T PendingPacket) Length() int {
}
func (T PendingPacket) WriteTo(encoder *Encoder) error {
- count := T.Decoder.len - T.Decoder.pos
- limited := io.LimitedReader{
- R: &T.Decoder.Reader,
- N: int64(count),
- }
- for limited.N > 0 {
- if _, err := encoder.Writer.ReadFrom(&limited); err != nil {
+ count := T.Decoder.Length() - T.Decoder.Position()
+ for T.Decoder.Position() < T.Decoder.Length() {
+ if _, err := encoder.Writer.ReadFrom(T.Decoder); err != nil {
return err
}
}
- T.Decoder.pos += count
encoder.pos += count
return nil
}
diff --git a/pgbouncer.ini b/pgbouncer.ini
index 428dbd8b0a5b045ffedfa82d061e6dfccc05ecf3..73dbd84942fafe96e5d09957cb032810930329e1 100644
--- a/pgbouncer.ini
+++ b/pgbouncer.ini
@@ -7,4 +7,4 @@ auth_user = postgres
server_idle_timeout = 10
[databases]
-* = host=/tmp/ datestyle=Postgres,MDY timezone=PST8PDT
+* = host=localhost datestyle=Postgres,MDY timezone=PST8PDT