Overview
Comment: | Release the lock in cases where there is an sqlite3 error. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | v1.60 |
Files: | files | file ages | folders |
SHA1: |
4174f38be9b1188359e01974e6f876f7 |
User & Date: | mrwellan on 2014-09-03 13:41:17 |
Other Links: | branch diff | manifest | tags |
Context
2014-09-03
| ||
15:22 | Increased timeouts in dot lock for portlogger check-in: c832c39e64 user: mrwellan tags: v1.60 | |
13:41 | Release the lock in cases where there is an sqlite3 error. check-in: 4174f38be9 user: mrwellan tags: v1.60 | |
11:44 | Added dot-locking around access to the portlogger db. Sqlite3 locking seems to have trouble on fast local disk sometimes (worked when system was loaded, failed when system was lightly loaded). check-in: 9db808f9fe user: mrwellan tags: v1.60 | |
Changes
Modified portlogger.scm from [1c366728ef] to [266c8500b0].
︙ | ︙ | |||
32 33 34 35 36 37 38 | port INTEGER PRIMARY KEY, state TEXT DEFAULT 'not-used', fail_count INTEGER DEFAULT 0, update_time TIMESTAMP DEFAULT (strftime('%s','now')) );")) db)) (define (portlogger:open-run-close proc . params) | > | | | > | | | | < | | | | | | | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | port INTEGER PRIMARY KEY, state TEXT DEFAULT 'not-used', fail_count INTEGER DEFAULT 0, update_time TIMESTAMP DEFAULT (strftime('%s','now')) );")) db)) (define (portlogger:open-run-close proc . params) (let ((fname (conc "/tmp/." (current-user-name) "-portlogger.db"))) (handle-exceptions exn (begin (release-dot-lock fname) (debug:print 0 "ERROR: portlogger:open-run-close failed. " proc " " params) (debug:print 0 " message: " ((condition-property-accessor 'exn 'message) exn)) (debug:print 0 "exn=" (condition->list exn)) (print-call-chain)) (let* ((lock (obtain-dot-lock fname 1 5 10)) (db (portlogger:open-db fname)) (res (apply proc db params))) (sqlite3:finalize! db) (release-dot-lock fname) res)))) ;; (fold-row PROC INIT DATABASE SQL . PARAMETERS) (define (portlogger:take-port db portnum) (let* ((qry1 (sqlite3:prepare db "INSERT INTO ports (port,state) VALUES (?,?);")) (qry2 (sqlite3:prepare db "UPDATE ports SET state=?,update_time=strftime('%s','now') WHERE port=?;")) (qry3 (sqlite3:prepare db "SELECT state FROM ports WHERE port=?;")) (res (sqlite3:with-transaction |
︙ | ︙ |