Index: client.scm ================================================================== --- client.scm +++ client.scm @@ -94,11 +94,11 @@ (let* ((server-dat (server:choose-server areapath 'best)) (runremote (or area-dat *runremote*))) (if (not server-dat) ;; no server found (client:setup-http-baby areapath remaining-tries: (- remaining-tries 1)) (match server-dat - ((host port start-time server-id) + ((host port start-time server-id pid) (debug:print-info 4 *default-log-port* "client:setup server-dat=" server-dat ", remaining-tries=" remaining-tries) (if (and (not area-dat) (not *runremote*)) (begin (set! *runremote* (make-remote)) Index: server.scm ================================================================== --- server.scm +++ server.scm @@ -428,11 +428,17 @@ (res (make-hash-table))) (for-each (lambda (f) (let* ((hostport (pathname-strip-directory f)) (serverdat (server:logf-get-start-info f))) - (hash-table-set! res hostport serverdat))) + (match serverdat + ((host port start server-id pid) + (if (and host port start server-id pid) + (hash-table-set! res hostport serverdat) + (debug:print-info 0 *default-log-port* "bad server info for "f": "serverdat))) + (else + (debug:print-info 0 *default-log-port* "bad server info for "f": "serverdat))))) allfiles) res))) ;; oldest server alive determines host then choose random of youngest ;; five servers on that host @@ -464,16 +470,16 @@ (all-valid (filter (lambda (x) (equal? host (list-ref (hash-table-ref serversdat x) 0))) by-time-asc)) (best-five (lambda () (if (> (length all-valid) 5) - (map (lambda (x) - (hash-table-ref serversdat x)) - (take all-valid 5)) + (take all-valid 5) all-valid))) (names->dats (lambda (names) - (map (lambda (x)(hash-table-ref serversdat x)) names))) + (map (lambda (x) + (hash-table-ref serversdat x)) + names))) (am-home? (lambda () (let* ((currhost (get-host-name)) (bestadrs (server:get-best-guess-address currhost))) (or (equal? host currhost) (equal? host bestadrs)))))) @@ -486,11 +492,11 @@ ((home?) (am-home?)) ((best-five)(names->dats (best-five))) ((all-valid)(names->dats all-valid)) ((best) (let* ((best-five (best-five)) (len (length best-five))) - (list-ref best-five (random len)))) + (hash-table-ref serversdat (list-ref best-five (random len))))) (else (debug:print 0 *default-log-port* "ERROR: invalid command "mode) #f))) (begin