From ed3622d0a66a0fa16e6c2fa00bbefd85622e3753 Mon Sep 17 00:00:00 2001 From: Mark Beamer Jr Date: Tue, 6 Apr 2021 14:21:05 -0400 Subject: [PATCH] Wait for request to be handled before returning --- peer/http3/server.go | 6 +++++- peer/http3/worker.go | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/peer/http3/server.go b/peer/http3/server.go index da8f485..2147421 100644 --- a/peer/http3/server.go +++ b/peer/http3/server.go @@ -70,7 +70,11 @@ func (s *Server) Start(address string) error { } r := mux.NewRouter() r.HandleFunc("/get/{hash}", func(w http.ResponseWriter, r *http.Request) { - enqueue(&blobRequest{request: r, reply: w}) + waiter := stop.New() + enqueue(&blobRequest{request: r, reply: w, finished: waiter}) + select { + case <-waiter.Ch(): + } }) r.HandleFunc("/has/{hash}", func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) diff --git a/peer/http3/worker.go b/peer/http3/worker.go index 182ca08..62c4c4d 100644 --- a/peer/http3/worker.go +++ b/peer/http3/worker.go @@ -9,8 +9,9 @@ import ( ) type blobRequest struct { - request *http.Request - reply http.ResponseWriter + request *http.Request + reply http.ResponseWriter + finished *stop.Group } var getReqCh = make(chan *blobRequest) @@ -37,4 +38,5 @@ func enqueue(b *blobRequest) { func process(server *Server, r *blobRequest) { server.HandleGetBlob(r.reply, r.request) + r.finished.Done() }