diff options
author | Simon Ser <contact@emersion.fr> | 2019-12-03 17:18:17 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-12-03 17:18:17 +0100 |
commit | 48d6d5d227a4d55d80f9f2a74c1242cafafab7ab (patch) | |
tree | ebd2b39d002e51309a73d2ebf2f5c75308a9afe6 /conn_pool.go | |
parent | ec03c60dffa5ac58d9b8b93f7ad644a18775790c (diff) | |
download | alps-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.go | 8 |
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 |