trying to stop cleanly

This commit is contained in:
2026-04-18 15:26:49 +02:00
parent 262859d2ea
commit 472a539133

View File

@@ -577,38 +577,47 @@
) ; close without closing windows ) ; close without closing windows
) )
(define evt-guard-stop -93273)
(define (start-event-processing) (define (start-event-processing)
(thread (λ () (thread (λ ()
(letrec (letrec
((f ((f
(λ () (λ ()
(let ((waiting (sync events-channel))) (let ((waiting (sync events-channel)))
(set! waiting (rkt_webview_events_waiting)) (if (= waiting evt-guard-stop)
;(displayln (format "Events waiting: ~a" waiting)) (begin
(while (> waiting 0) (displayln "got evt-guard-stop, exiting event processing")
(let* ((rkt-evt (rkt_webview_get_event))) evt-guard-stop)
(if (eq? rkt-evt #f) (begin
(displayln (format "Unexpected: event = nullptr")) (set! waiting (rkt_webview_events_waiting))
(let* ((data (rkt_data_t-data rkt-evt)) (while (> waiting 0)
(e (union-ref data 1)) (let* ((rkt-evt (rkt_webview_get_event)))
(wv (rkt_evt_t-w e)) (if (eq? rkt-evt #f)
(evt (cast (rkt_evt_t-evt e) (displayln (format "Unexpected: event = nullptr"))
_pointer (let* ((data (rkt_data_t-data rkt-evt))
_string*/utf-8)) (e (union-ref data 1))
) (wv (rkt_evt_t-w e))
(rkt_webview_free_data rkt-evt) (evt (cast (rkt_evt_t-evt e)
;(displayln (format "~a ~a" wv evt)) _pointer
(if (= wv alive-error-event) _string*/utf-8))
(close-down-on-alive-error) )
(let ((cb (hash-ref evt-cb-hash wv #f))) (rkt_webview_free_data rkt-evt)
(unless (eq? cb #f) ;(displayln (format "~a ~a" wv evt))
(cb evt))))))) (if (= wv alive-error-event)
(set! waiting (- waiting 1)) (close-down-on-alive-error)
) (let ((cb (hash-ref evt-cb-hash wv #f)))
(unless (eq? cb #f)
(cb evt)))))))
(set! waiting (- waiting 1))
)
(f))
)
) )
(f)) )
)) ))
(f))))) (f))))
)
(define evt-processing-thread (start-event-processing)) (define evt-processing-thread (start-event-processing))
@@ -813,6 +822,7 @@
(define (rkt-webview-finalizer rkt-wv-store close-windows message) (define (rkt-webview-finalizer rkt-wv-store close-windows message)
(displayln "rkt-webview-finalizer active")
(when close-windows (when close-windows
(let ((open-windows (hash->list rkt-wv-store))) (let ((open-windows (hash->list rkt-wv-store)))
(for-each (λ (kv) (for-each (λ (kv)
@@ -820,6 +830,7 @@
(handle (cdr kv))) (handle (cdr kv)))
(rkt-webview-close handle))) (rkt-webview-close handle)))
open-windows))) open-windows)))
(event-callback evt-guard-stop)
(rkt_webview_cleanup) (rkt_webview_cleanup)
(unless (eq? message #f) (error message)) (unless (eq? message #f) (error message))
(stop-event-processing) (stop-event-processing)