Compare commits

..

1 Commits

Author SHA1 Message Date
Fusl 6952cec09f use a reusable slice for storing args in readcommands functions 2022-09-30 18:38:32 +00:00
2 changed files with 15 additions and 26 deletions

View File

@ -18,8 +18,6 @@ Features
- Compatible pub/sub support - Compatible pub/sub support
- Multithreaded - Multithreaded
*This library is also avaliable for [Rust](https://github.com/tidwall/redcon.rs) and [C](https://github.com/tidwall/redcon.c).*
Installing Installing
---------- ----------

View File

@ -236,14 +236,12 @@ func Serve(ln net.Listener,
closed func(conn Conn, err error), closed func(conn Conn, err error),
) error { ) error {
s := newServer() s := newServer()
s.mu.Lock()
s.net = ln.Addr().Network() s.net = ln.Addr().Network()
s.laddr = ln.Addr().String() s.laddr = ln.Addr().String()
s.ln = ln s.ln = ln
s.handler = handler s.handler = handler
s.accept = accept s.accept = accept
s.closed = closed s.closed = closed
s.mu.Unlock()
return serve(s) return serve(s)
} }
@ -299,9 +297,7 @@ func (s *Server) ListenServeAndSignal(signal chan error) error {
} }
return err return err
} }
s.mu.Lock()
s.ln = ln s.ln = ln
s.mu.Unlock()
if signal != nil { if signal != nil {
signal <- nil signal <- nil
} }
@ -310,11 +306,9 @@ func (s *Server) ListenServeAndSignal(signal chan error) error {
// Serve serves incoming connections with the given net.Listener. // Serve serves incoming connections with the given net.Listener.
func (s *Server) Serve(ln net.Listener) error { func (s *Server) Serve(ln net.Listener) error {
s.mu.Lock()
s.ln = ln s.ln = ln
s.net = ln.Addr().Network() s.net = ln.Addr().Network()
s.laddr = ln.Addr().String() s.laddr = ln.Addr().String()
s.mu.Unlock()
return serve(s) return serve(s)
} }
@ -328,9 +322,7 @@ func (s *TLSServer) ListenServeAndSignal(signal chan error) error {
} }
return err return err
} }
s.mu.Lock()
s.ln = ln s.ln = ln
s.mu.Unlock()
if signal != nil { if signal != nil {
signal <- nil signal <- nil
} }
@ -344,7 +336,7 @@ func serve(s *Server) error {
s.mu.Lock() s.mu.Lock()
defer s.mu.Unlock() defer s.mu.Unlock()
for c := range s.conns { for c := range s.conns {
c.conn.Close() c.Close()
} }
s.conns = nil s.conns = nil
}() }()
@ -611,9 +603,9 @@ func (w *Writer) WriteNull() {
// sub-responses to the client to complete the response. // sub-responses to the client to complete the response.
// For example to write two strings: // For example to write two strings:
// //
// c.WriteArray(2) // c.WriteArray(2)
// c.WriteBulkString("item 1") // c.WriteBulkString("item 1")
// c.WriteBulkString("item 2") // c.WriteBulkString("item 2")
func (w *Writer) WriteArray(count int) { func (w *Writer) WriteArray(count int) {
if w.err != nil { if w.err != nil {
return return
@ -718,18 +710,17 @@ func (w *Writer) WriteRaw(data []byte) {
} }
// WriteAny writes any type to client. // WriteAny writes any type to client.
// // nil -> null
// nil -> null // error -> error (adds "ERR " when first word is not uppercase)
// error -> error (adds "ERR " when first word is not uppercase) // string -> bulk-string
// string -> bulk-string // numbers -> bulk-string
// numbers -> bulk-string // []byte -> bulk-string
// []byte -> bulk-string // bool -> bulk-string ("0" or "1")
// bool -> bulk-string ("0" or "1") // slice -> array
// slice -> array // map -> array with key/value pairs
// map -> array with key/value pairs // SimpleString -> string
// SimpleString -> string // SimpleInt -> integer
// SimpleInt -> integer // everything-else -> bulk-string representation using fmt.Sprint()
// everything-else -> bulk-string representation using fmt.Sprint()
func (w *Writer) WriteAny(v interface{}) { func (w *Writer) WriteAny(v interface{}) {
if w.err != nil { if w.err != nil {
return return