diff --git a/CHANGELOG.md b/CHANGELOG.md index c2f5fa5..54bf8e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,13 @@ _v.6.0.1_ - Fix button sound on select panel for TG (beep state inverted) - Auto populate system units (issue #66) +_v.6.0.2_ + +- Try to fix the SQL_BUSY error (issue #67). +- Fix `-service stop` timing out before exiting. +- Drop the ApiKey uniqueness of the downstreams database table. +- Fix auto-populating the database with empty units tag. + ## Version 5.2 - Change to how the server reports version. diff --git a/Makefile b/Makefile index f4ba7fd..ecb92c4 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ ################################################################################ app := rdio-scanner -ver := 6.0.1 +ver := 6.0.2 client := $(wildcard client/*.json client/*.ts) server := $(wildcard server/*.go) diff --git a/client/package.json b/client/package.json index 9ad00ea..2364c03 100644 --- a/client/package.json +++ b/client/package.json @@ -39,5 +39,5 @@ "build": "ng build --base-href ./ --configuration production", "start": "ng serve" }, - "version": "6.0.1" + "version": "6.0.2" } diff --git a/docs/platforms/darwin.md b/docs/platforms/darwin.md index fd7a486..6eebaa1 100644 --- a/docs/platforms/darwin.md +++ b/docs/platforms/darwin.md @@ -41,8 +41,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd rdio@macos ~ % mkdir rdio-scanner rdio@macos ~ % cd rdio-scanner rdio@macos rdio-scanner % unzip \ - > ~/Downloads/rdio-scanner-darwin-arm64-v6.0.1.zip - Archive: /Users/rdio/Downloads/rdio-scanner-darwin-arm64-v6.0.1.zip + > ~/Downloads/rdio-scanner-darwin-arm64-v6.0.2.zip + Archive: /Users/rdio/Downloads/rdio-scanner-darwin-arm64-v6.0.2.zip inflating: rdio-scanner inflating: rdio-scanner.pdf @@ -50,7 +50,7 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd rdio@macos rdio-scanner % ./rdio-scanner - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 08:38:06 server started 2021/11/29 08:38:06 main interface at http://macos.local:3000 @@ -76,7 +76,7 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance rdio@macos rdio-scanner % ./rdio-scanner --listen :80 - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 08:48:03 server started 2021/11/29 08:48:03 main interface at http://macos.local @@ -107,7 +107,7 @@ Now we use the self-signed server certificate to run our instance. > -ssl_key_file server.key \ > -ssl_listen :443 - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 08:50:58 server started 2021/11/29 08:50:58 main interface at http://macos.local @@ -139,7 +139,7 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an rdio@macos rdio-scanner % ./rdio-scanner - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 08:54:08 server started 2021/11/29 08:54:08 main interface at http://macos.local diff --git a/docs/platforms/freebsd.md b/docs/platforms/freebsd.md index 93786d2..36b5711 100644 --- a/docs/platforms/freebsd.md +++ b/docs/platforms/freebsd.md @@ -41,8 +41,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd rdio@pc-freebsd:~ $ mkdir rdio-scanner rdio@pc-freebsd:~ $ cd rdio-scanner rdio@pc-freebsd:~/rdio-scanner $ unzip \ - > ~/rdio-scanner-freebsd-amd64-v6.0.1.zip - Archive: ../rdio-scanner-freebsd-amd64-v6.0.1.zip + > ~/rdio-scanner-freebsd-amd64-v6.0.2.zip + Archive: ../rdio-scanner-freebsd-amd64-v6.0.2.zip extracting: rdio-scanner extracting: rdio-scanner.pdf @@ -50,7 +50,7 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd rdio@pc-freebsd:~/rdio-scanner $ ./rdio-scanner - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/28 08:16:36 server started 2021/11/28 08:16:36 main interface at http://pc-freebsd:3000 @@ -80,7 +80,7 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance Password: root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner -listen :80 - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/28 08:19:38 server started 2021/11/28 08:19:38 main interface at http://pc-freebsd @@ -113,7 +113,7 @@ Now we use the self-signed server certificate to run our instance. > -ssl_key_file server.key \ > -ssl_listen :443 - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/28 10:34:29 server started 2021/11/28 10:34:29 main interface at http://pc-freebsd @@ -147,7 +147,7 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an Password: root@pc-freebsd:/home/rdio/rdio-scanner # ./rdio-scanner - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/28 10:38:28 server started 2021/11/28 10:38:29 main interface at http://pc-freebsd diff --git a/docs/platforms/linux.md b/docs/platforms/linux.md index 9b6281c..1471609 100644 --- a/docs/platforms/linux.md +++ b/docs/platforms/linux.md @@ -41,8 +41,8 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd [rdio@pc-linux ~]$ mkdir rdio-scanner [rdio@pc-linux ~]$ cd rdio-scanner [rdio@pc-linux rdio-scanner]$ unzip \ - > ~/Downloads/rdio-scanner-linux-amd64-v6.0.1.zip - Archive: /home/rdio/Downloads/rdio-scanner-linux-amd64-v6.0.1.zip + > ~/Downloads/rdio-scanner-linux-amd64-v6.0.2.zip + Archive: /home/rdio/Downloads/rdio-scanner-linux-amd64-v6.0.2.zip inflating: rdio-scanner inflating: rdio-scanner.pdf @@ -50,7 +50,7 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd [rdio@pc-linux rdio-scanner]$ ./rdio-scanner - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 09:11:48 server started 2021/11/29 09:11:48 main interface at http://pc-linux:3000 @@ -77,7 +77,7 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance [rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner -listen :80 [sudo] password for rdio: - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 09:14:00 server started 2021/11/29 09:14:00 main interface at http://pc-linux @@ -109,7 +109,7 @@ Now we use the self-signed server certificate to run our instance. > -ssl_listen :443 [sudo] password for rdio: - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 09:16:47 server started 2021/11/29 09:16:47 main interface at http://pc-linux @@ -142,7 +142,7 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an [rdio@pc-linux rdio-scanner]$ sudo ./rdio-scanner [sudo] Mot de passe de rdio : - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/29 09:20:40 server started 2021/11/29 09:20:40 main interface at http://pc-linux diff --git a/docs/platforms/windows.md b/docs/platforms/windows.md index 61c3175..a2302d1 100644 --- a/docs/platforms/windows.md +++ b/docs/platforms/windows.md @@ -43,7 +43,7 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd C:\Users\rdio> cd rdio-scanner C:\Users\rdio\rdio-scanner> tar -xvf ^ - ..\downloads\rdio-scanner-windows-amd64-v6.0.1.zip + ..\downloads\rdio-scanner-windows-amd64-v6.0.2.zip x rdio-scanner.exe x rdio-scanner.pdf @@ -51,7 +51,7 @@ ALWAYS DOWNLOAD THE LATEST VERSION OF [RDIO SCANNER](https://github.com/chuot/rd C:\Users\rdio\rdio-scanner>rdio-scanner - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/25 13:48:48 server started 2021/11/25 13:48:48 main interface at http://pc-windows:3000 @@ -77,7 +77,7 @@ Here we want our [Rdio Scanner](https://guthub.com/chuot/rdio-scanner) instance C:\Users\rdio\rdio-scanner>rdio-scanner -listen :80 - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/26 10:53:31 server started 2021/11/26 10:53:31 main interface at http://pc-windows @@ -108,7 +108,7 @@ Now we use the self-signed server certificate to run our instance. -ssl_key_file server.key ^ -ssl_listen :443 - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/26 11:05:43 server started 2021/11/26 11:05:43 main interface at http://pc-windows @@ -140,7 +140,7 @@ Then simply run [Rdio Scanner](https://github.com/chuot/rdio-scanner) without an C:\Users\rdio\rdio-scanner>rdio-scanner - Rdio Scanner v6.0.1 + Rdio Scanner v6.0.2 ---------------------------------- 2021/11/26 11:11:28 server started 2021/11/26 11:11:28 main interface at http://pc-windows diff --git a/server/access.go b/server/access.go index 2fad689..113c64b 100644 --- a/server/access.go +++ b/server/access.go @@ -271,6 +271,7 @@ func (accesses *Accesses) Write(db *Database) error { } if err != nil { + rows.Close() return formatError(err) } diff --git a/server/apikey.go b/server/apikey.go index da74e2e..860f509 100644 --- a/server/apikey.go +++ b/server/apikey.go @@ -240,6 +240,7 @@ func (apikeys *Apikeys) Write(db *Database) error { } if err != nil { + rows.Close() return formatError(err) } diff --git a/server/controller.go b/server/controller.go index f24b64d..179c842 100644 --- a/server/controller.go +++ b/server/controller.go @@ -630,7 +630,13 @@ func (controller *Controller) SendClientConfig(client *Client) { } func (controller *Controller) Terminate() { + if err := controller.Database.Sql.Close(); err != nil { + log.Println(err) + } + controller.Dirwatches.Stop() + log.Println("terminated") + os.Exit(0) } diff --git a/server/daemon.go b/server/daemon.go index 023f3fe..d262a05 100644 --- a/server/daemon.go +++ b/server/daemon.go @@ -17,6 +17,7 @@ package main import ( "log" + "os" "runtime" "github.com/kardianos/service" @@ -78,5 +79,6 @@ func (d *DaemonInterface) Start(s service.Service) error { } func (d *DaemonInterface) Stop(s service.Service) error { + os.Exit(0) return nil } diff --git a/server/database.go b/server/database.go index efcbeba..69d1d0e 100644 --- a/server/database.go +++ b/server/database.go @@ -67,6 +67,10 @@ func (db *Database) Init(config *Config) error { return fmt.Errorf("unknown database type %s", db.Config.DbType) } + db.Sql.SetConnMaxLifetime(0) + db.Sql.SetMaxIdleConns(10) + db.Sql.SetMaxOpenConns(10) + if err = db.migrate(); err != nil { return err } @@ -151,6 +155,10 @@ func (db *Database) migrate() error { err = db.migration20210830092027(verbose) } + if err == nil { + err = db.migration20211202094819(verbose) + } + return err } @@ -400,6 +408,29 @@ func (db *Database) migration20210830092027(verbose bool) error { return db.migrateWithSchema("20210830092027-v6.0-rename-index", str, verbose) } +func (db *Database) migration20211202094819(verbose bool) error { + var str []string + + if db.Config.DbType == DbTypeSqlite { + str = []string{ + "alter table `rdioScannerDownstreams` rename to `rdioScannerDownstreams2`", + "create table `rdioScannerDownstreams` (`_id` integer primary key autoincrement, `apiKey` varchar(255) not null, `disabled` tinyint(1) default 0, `order` integer, `systems` text not null, `url` varchar(255) not null)", + "insert into `rdioScannerDownstreams` select * from `rdioScannerDownstreams2`", + "drop table `rdioScannerDownstreams2`", + } + + } else { + str = []string{ + "alter table `rdioScannerDownstreams` rename to `rdioScannerDownstreams2`", + "create table `rdioScannerDownstreams` (`_id` integer primary key auto_increment, `apiKey` varchar(255) not null, `disabled` tinyint(1) default 0, `order` integer, `systems` text not null, `url` varchar(255) not null)", + "insert into `rdioScannerDownstreams` select * from `rdioScannerDownstreams2`", + "drop table `rdioScannerDownstreams2`", + } + } + + return db.migrateWithSchema("20211202094819-v6.0.2-alter-table", str, verbose) +} + func (db *Database) prepareMigration() (bool, error) { var ( err error diff --git a/server/dirwatch.go b/server/dirwatch.go index e9941ab..7d8545d 100644 --- a/server/dirwatch.go +++ b/server/dirwatch.go @@ -662,6 +662,7 @@ func (dirwatches *Dirwatches) Write(db *Database) error { } if err != nil { + rows.Close() return formatError(err) } diff --git a/server/downstream.go b/server/downstream.go index eaa618e..623fd8f 100644 --- a/server/downstream.go +++ b/server/downstream.go @@ -474,6 +474,7 @@ func (downstreams *Downstreams) Write(db *Database) error { } if err != nil { + rows.Close() return formatError(err) } diff --git a/server/go.mod b/server/go.mod index dd99d29..7fca7e8 100644 --- a/server/go.mod +++ b/server/go.mod @@ -11,7 +11,7 @@ require ( github.com/gorilla/websocket v1.4.2 github.com/kardianos/service v1.2.0 golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 - gopkg.in/ini.v1 v1.66.0 + gopkg.in/ini.v1 v1.66.1 modernc.org/sqlite v1.14.1 ) @@ -21,15 +21,15 @@ require ( github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect github.com/stretchr/testify v1.7.0 // indirect golang.org/x/mod v0.5.1 // indirect - golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 // indirect + golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c // indirect golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/tools v0.1.7 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect lukechampine.com/uint128 v1.1.1 // indirect modernc.org/cc/v3 v3.35.18 // indirect - modernc.org/ccgo/v3 v3.12.78 // indirect - modernc.org/libc v1.11.86 // indirect + modernc.org/ccgo/v3 v3.12.82 // indirect + modernc.org/libc v1.11.87 // indirect modernc.org/mathutil v1.4.1 // indirect modernc.org/memory v1.0.5 // indirect modernc.org/opt v0.1.1 // indirect diff --git a/server/go.sum b/server/go.sum index e311dbe..e5365fd 100644 --- a/server/go.sum +++ b/server/go.sum @@ -48,8 +48,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 h1:0qxwC5n+ttVOINCBeRHO0nq9X7uy8SDsPoi5OaCdIEI= -golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c h1:WtYZ93XtWSO5KlOMgPZu7hXY9WhMZpprvlm5VwvAl8c= +golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -85,8 +85,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/ini.v1 v1.66.0 h1:tYFFjdYXTsNBxJhYBABRbTuaKkX6UBzOvbYwhEcaZJQ= -gopkg.in/ini.v1 v1.66.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.1 h1:kWVKj9OXQuOk10tEqPxDmpEoISM3NZHelrsfWcmtEUA= +gopkg.in/ini.v1 v1.66.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= @@ -139,8 +139,9 @@ modernc.org/ccgo/v3 v3.12.65/go.mod h1:D6hQtKxPNZiY6wDBtehSGKFKmyXn53F8nGTpH+POm modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ= modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84= modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ= -modernc.org/ccgo/v3 v3.12.78 h1:yinLezxvjgDrGouUmimNGvQe4UMy57F4QQiNFqzPuFA= -modernc.org/ccgo/v3 v3.12.78/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= +modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= +modernc.org/ccgo/v3 v3.12.82 h1:wudcnJyjLj1aQQCXF3IM9Gz2X6UNjw+afIghzdtn0v8= +modernc.org/ccgo/v3 v3.12.82/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= modernc.org/ccorpus v1.11.1 h1:K0qPfpVG1MJh5BYazccnmhywH4zHuOgJXgbjzyp6dWA= modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= @@ -178,8 +179,9 @@ modernc.org/libc v1.11.70/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0= modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI= -modernc.org/libc v1.11.86 h1:re2EI0lgrQTcU5fmSFFiK51NfFIXI1cE9CJMKgn9umY= modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE= +modernc.org/libc v1.11.87 h1:PzIzOqtlzMDDcCzJ5cUP6h/Ku6Fa9iyflP2ccTY64aE= +modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY= modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= diff --git a/server/group.go b/server/group.go index b7abc75..77c6aec 100644 --- a/server/group.go +++ b/server/group.go @@ -229,6 +229,7 @@ func (groups *Groups) Write(db *Database) error { } if err != nil { + rows.Close() return formatError(err) } diff --git a/server/parsers.go b/server/parsers.go index 4815fec..68c5abc 100644 --- a/server/parsers.go +++ b/server/parsers.go @@ -154,15 +154,17 @@ func ParseTrunkRecorderMeta(call *Call, b []byte) error { switch t := v["tag"].(type) { case string: - var units Units - switch v := call.units.(type) { - case Units: - units = v - default: - units = Units{} + if len(t) > 0 { + var units Units + switch v := call.units.(type) { + case Units: + units = v + default: + units = Units{} + } + units.Add(uint(s), t) + call.units = units } - units.Add(uint(s), t) - call.units = units } } diff --git a/server/system.go b/server/system.go index a38fcc3..1182de5 100644 --- a/server/system.go +++ b/server/system.go @@ -438,6 +438,7 @@ func (systems *Systems) Write(db *Database) error { } if err != nil { + rows.Close() return formatError(err) } diff --git a/server/tags.go b/server/tags.go index f61c878..cfb7fa8 100644 --- a/server/tags.go +++ b/server/tags.go @@ -228,6 +228,7 @@ func (tags *Tags) Write(db *Database) error { } if err != nil { + rows.Close() return formatError(err) } diff --git a/server/version.go b/server/version.go index 42882e2..59d7cc2 100644 --- a/server/version.go +++ b/server/version.go @@ -15,4 +15,4 @@ package main -const Version = "6.0.1" +const Version = "6.0.2"