Browse Source

persist last seen on shutdown

tags/v2.2.0-rc1
Shivaram Lingamneni 4 years ago
parent
commit
0f04acaa40
2 changed files with 24 additions and 3 deletions
  1. 21
    3
      irc/client.go
  2. 3
    0
      irc/server.go

+ 21
- 3
irc/client.go View File

1724
 
1724
 
1725
 func (client *Client) writeLoop() {
1725
 func (client *Client) writeLoop() {
1726
 	for {
1726
 	for {
1727
-		client.performWrite()
1727
+		client.performWrite(0)
1728
 		client.writerSemaphore.Release()
1728
 		client.writerSemaphore.Release()
1729
 
1729
 
1730
 		client.stateMutex.RLock()
1730
 		client.stateMutex.RLock()
1737
 	}
1737
 	}
1738
 }
1738
 }
1739
 
1739
 
1740
-func (client *Client) performWrite() {
1740
+func (client *Client) performWrite(additionalDirtyBits uint) {
1741
 	client.stateMutex.Lock()
1741
 	client.stateMutex.Lock()
1742
-	dirtyBits := client.dirtyBits
1742
+	dirtyBits := client.dirtyBits | additionalDirtyBits
1743
 	client.dirtyBits = 0
1743
 	client.dirtyBits = 0
1744
 	account := client.account
1744
 	account := client.account
1745
 	client.stateMutex.Unlock()
1745
 	client.stateMutex.Unlock()
1775
 		client.server.accounts.saveModes(account, uModes)
1775
 		client.server.accounts.saveModes(account, uModes)
1776
 	}
1776
 	}
1777
 }
1777
 }
1778
+
1779
+// Blocking store; see Channel.Store and Socket.BlockingWrite
1780
+func (client *Client) Store(dirtyBits uint) (err error) {
1781
+	defer func() {
1782
+		client.stateMutex.Lock()
1783
+		isDirty := client.dirtyBits != 0
1784
+		client.stateMutex.Unlock()
1785
+
1786
+		if isDirty {
1787
+			client.wakeWriter()
1788
+		}
1789
+	}()
1790
+
1791
+	client.writerSemaphore.Acquire()
1792
+	defer client.writerSemaphore.Release()
1793
+	client.performWrite(dirtyBits)
1794
+	return nil
1795
+}

+ 3
- 0
irc/server.go View File

116
 	//TODO(dan): Make sure we disallow new nicks
116
 	//TODO(dan): Make sure we disallow new nicks
117
 	for _, client := range server.clients.AllClients() {
117
 	for _, client := range server.clients.AllClients() {
118
 		client.Notice("Server is shutting down")
118
 		client.Notice("Server is shutting down")
119
+		if client.AlwaysOn() {
120
+			client.Store(IncludeLastSeen)
121
+		}
119
 	}
122
 	}
120
 
123
 
121
 	if err := server.store.Close(); err != nil {
124
 	if err := server.store.Close(); err != nil {

Loading…
Cancel
Save