aboutsummaryrefslogtreecommitdiff
path: root/conn_pool.go
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2019-12-03 17:18:17 +0100
committerSimon Ser <contact@emersion.fr>2019-12-03 17:18:17 +0100
commit48d6d5d227a4d55d80f9f2a74c1242cafafab7ab (patch)
treeebd2b39d002e51309a73d2ebf2f5c75308a9afe6 /conn_pool.go
parentec03c60dffa5ac58d9b8b93f7ad644a18775790c (diff)
downloadalps-48d6d5d227a4d55d80f9f2a74c1242cafafab7ab.tar.gz
alps-48d6d5d227a4d55d80f9f2a74c1242cafafab7ab.zip
Add session lock
HTTP requests can be processed in parallel, but we only have one IMAP connection per session. Closes: https://todo.sr.ht/~sircmpwn/koushin/12
Diffstat (limited to 'conn_pool.go')
-rw-r--r--conn_pool.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/conn_pool.go b/conn_pool.go
index 1ccc879..69281af 100644
--- a/conn_pool.go
+++ b/conn_pool.go
@@ -21,10 +21,18 @@ func generateToken() (string, error) {
var ErrSessionExpired = errors.New("session expired")
type Session struct {
+ locker sync.Mutex
imapConn *imapclient.Client
username, password string
}
+func (s *Session) Do(f func(*imapclient.Client) error) error {
+ s.locker.Lock()
+ defer s.locker.Unlock()
+
+ return f(s.imapConn)
+}
+
// TODO: expiration timer
type ConnPool struct {
locker sync.Mutex