Explorar o código

racket: bump Racket to 8.6 (#7541)

Also tweak parameters and adjust `place-tcp-listener` implementation
for recent web-server changes[1].

[1]: https://github.com/racket/web-server/pull/121
Bogdan Popa %!s(int64=3) %!d(string=hai) anos
pai
achega
2a2a3dd282

+ 9 - 1
frameworks/Racket/racket/app.rkt

@@ -226,7 +226,8 @@
      #:tcp@ tcp@
      #:confirmation-channel ch
      #:safety-limits (make-safety-limits
-                      #:max-waiting 4096
+                      #:max-concurrent 1000
+                      #:max-waiting 65535
                       #:request-read-timeout 16
                       #:response-timeout 16
                       #:response-send-timeout 16)))
@@ -236,3 +237,10 @@
     (raise ready-or-exn))
 
   stop)
+
+(module+ main
+  (require net/tcp-unit)
+  (define stop (start "127.0.0.1" 8000 tcp@))
+  (with-handlers ([exn:break? (λ (_) (stop))])
+    (displayln "ready")
+    (sync never-evt)))

+ 5 - 2
frameworks/Racket/racket/main.rkt

@@ -62,7 +62,7 @@
     (apply choice-evt (map place-dead-evt places)))
 
   (define backlog
-    (* parallelism 4 1024))
+    (* parallelism 65 1024))
   (define listener
     (tcp-listen port backlog #t host))
   (define stop-ch (make-channel))
@@ -71,6 +71,7 @@
      (lambda ()
        (define places* (list->vector places))
        (define num-places (vector-length places*))
+       (define stop-evt (choice-evt stop-ch place-fail-evt))
        (let loop ([idx 0])
          (sync
           (handle-evt
@@ -79,9 +80,11 @@
              (define-values (in out)
                (tcp-accept listener))
              (place-channel-put (vector-ref places* idx) `(accept ,in, out))
+             (tcp-abandon-port out)
+             (tcp-abandon-port in)
              (loop (modulo (add1 idx) num-places))))
           (handle-evt
-           (choice-evt stop-ch place-fail-evt)
+           stop-evt
            (lambda (_)
              (stop-places)
              (tcp-close listener))))))))

+ 20 - 6
frameworks/Racket/racket/place-tcp-unit.rkt

@@ -7,7 +7,11 @@
 (provide
  make-place-tcp@)
 
-(struct place-tcp-listener ())
+(struct place-tcp-listener (sema ch)
+  #:property prop:evt (lambda (self)
+                        (handle-evt
+                         (place-tcp-listener-sema self)
+                         (lambda (_) self))))
 
 (define (make-place-tcp@ accept-ch)
   (unit
@@ -17,11 +21,11 @@
     (define (tcp-abandon-port p)
       (tcp:tcp-abandon-port p))
 
-    (define (tcp-accept _l)
-      (apply values (channel-get accept-ch)))
+    (define (tcp-accept l)
+      (apply values (channel-get (place-tcp-listener-ch l))))
 
-    (define (tcp-accept/enable-break _l)
-      (apply values (sync/enable-break accept-ch)))
+    (define (tcp-accept/enable-break l)
+      (apply values (sync/enable-break (place-tcp-listener-ch l))))
 
     (define (tcp-accept-ready? _l)
       (error 'tcp-accept-ready? "not supported"))
@@ -50,7 +54,17 @@
                         [_backlog 4]
                         [_reuse? #f]
                         [_hostname #f])
-      (place-tcp-listener))
+      (define sema (make-semaphore))
+      (define ch (make-channel))
+      (thread
+       (lambda ()
+         (let loop ()
+           (define data (channel-get accept-ch))
+           (semaphore-post sema)
+           (channel-put ch data)
+           (loop))))
+
+      (place-tcp-listener sema ch))
 
     (define (tcp-listener? l)
       (place-tcp-listener? l))))

+ 1 - 2
frameworks/Racket/racket/racket.dockerfile

@@ -11,7 +11,7 @@ RUN echo 'APT::Get::Install-Recommends "false";' > /etc/apt/apt.conf.d/00-genera
 
 FROM debian AS racket
 
-ARG RACKET_VERSION=8.3
+ARG RACKET_VERSION=8.6
 
 RUN apt-get update -q \
     && apt-get install --no-install-recommends -q -y \
@@ -28,7 +28,6 @@ ENV SSL_CERT_DIR="/etc/ssl/certs"
 RUN apt-get update -q \
   && apt-get install --no-install-recommends -q -y redis-server
 
-
 FROM racket AS builder
 
 RUN raco pkg install -D --auto --skip-installed redis-lib threading-lib