summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--db/db.go4
-rw-r--r--db/db_test.go16
2 files changed, 20 insertions, 0 deletions
diff --git a/db/db.go b/db/db.go
index 2d6a4d5..6bc6d04 100644
--- a/db/db.go
+++ b/db/db.go
@@ -8,6 +8,7 @@ import (
"fmt"
"os"
"path"
+ "sync"
"ricketyspace.net/fern/file"
)
@@ -15,6 +16,7 @@ import (
var dbPath string
type FernDB struct {
+ mutex *sync.Mutex // For writes to `downloaded`
// Key: feed-id
// Value: feed-id's entries that were downloaded
downloaded map[string][]string
@@ -42,6 +44,7 @@ func Open() (*FernDB, error) {
if err != nil {
// db does not exist yet; create an empty one.
db := new(FernDB)
+ db.mutex = new(sync.Mutex)
db.downloaded = make(map[string][]string)
return db, nil
}
@@ -58,6 +61,7 @@ func Open() (*FernDB, error) {
// Unmarshal db into an object.
db := new(FernDB)
+ db.mutex = new(sync.Mutex)
err = json.Unmarshal(bs, &db.downloaded)
if err != nil {
return nil, err
diff --git a/db/db_test.go b/db/db_test.go
index 5a2a983..e2308c1 100644
--- a/db/db_test.go
+++ b/db/db_test.go
@@ -46,6 +46,14 @@ func TestOpenNewDB(t *testing.T) {
return
}
+ // Verify that 'mutex' is initialized.
+ if db.mutex == nil {
+ t.Errorf("db.mutex is nil")
+ return
+ }
+ db.mutex.Lock()
+ db.mutex.Unlock()
+
// Verify that 'downloaded' is initialized
if db.downloaded == nil {
t.Errorf("db.downloaded is nil")
@@ -77,6 +85,14 @@ func TestOpenExistingDB(t *testing.T) {
return
}
+ // Verify that 'mutex' is initialized.
+ if db.mutex == nil {
+ t.Errorf("db.mutex is nil")
+ return
+ }
+ db.mutex.Lock()
+ db.mutex.Unlock()
+
// Validate db.downloaded.
var entries, expectedEntries []string
var ok bool