try getting rid of race condition
This commit is contained in:
parent
95a9c1bda9
commit
f4640e82c4
@ -109,8 +109,6 @@ type NNTPDaemon struct {
|
|||||||
register_connection chan *nntpConnection
|
register_connection chan *nntpConnection
|
||||||
deregister_connection chan *nntpConnection
|
deregister_connection chan *nntpConnection
|
||||||
|
|
||||||
// channel to load messages to infeed given their message id
|
|
||||||
infeed_load chan string
|
|
||||||
// channel for broadcasting a message to all feeds given their newsgroup, message_id
|
// channel for broadcasting a message to all feeds given their newsgroup, message_id
|
||||||
send_all_feeds chan ArticleEntry
|
send_all_feeds chan ArticleEntry
|
||||||
// channel for broadcasting an ARTICLE command to all feeds in reader mode
|
// channel for broadcasting an ARTICLE command to all feeds in reader mode
|
||||||
@ -536,7 +534,6 @@ func (self *NNTPDaemon) Run() {
|
|||||||
|
|
||||||
self.register_connection = make(chan *nntpConnection)
|
self.register_connection = make(chan *nntpConnection)
|
||||||
self.deregister_connection = make(chan *nntpConnection)
|
self.deregister_connection = make(chan *nntpConnection)
|
||||||
self.infeed_load = make(chan string, 128)
|
|
||||||
self.send_all_feeds = make(chan ArticleEntry)
|
self.send_all_feeds = make(chan ArticleEntry)
|
||||||
self.activeConnections = make(map[string]*nntpConnection)
|
self.activeConnections = make(map[string]*nntpConnection)
|
||||||
self.loadedFeeds = make(map[string]*feedState)
|
self.loadedFeeds = make(map[string]*feedState)
|
||||||
@ -674,8 +671,7 @@ func (self *NNTPDaemon) syncAllMessages() {
|
|||||||
|
|
||||||
// load a message from the infeed directory
|
// load a message from the infeed directory
|
||||||
func (self *NNTPDaemon) loadFromInfeed(msgid string) {
|
func (self *NNTPDaemon) loadFromInfeed(msgid string) {
|
||||||
log.Println("load from infeed", msgid)
|
self.processMessage(msgid)
|
||||||
self.infeed_load <- msgid
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// reload all configs etc
|
// reload all configs etc
|
||||||
@ -840,19 +836,16 @@ func (self *NNTPDaemon) pump_article_requests() {
|
|||||||
articles = nil
|
articles = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *NNTPDaemon) poll(worker int) {
|
func (self *NNTPDaemon) processMessage(msgid string) {
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case msgid := <-self.infeed_load:
|
|
||||||
log.Println("load", msgid)
|
log.Println("load", msgid)
|
||||||
hdr := self.store.GetHeaders(msgid)
|
hdr := self.store.GetHeaders(msgid)
|
||||||
if hdr == nil {
|
if hdr == nil {
|
||||||
log.Println("worker", worker, "failed to load", msgid)
|
log.Println("failed to load", msgid)
|
||||||
} else {
|
} else {
|
||||||
rollover := 100
|
rollover := 100
|
||||||
group := hdr.Get("Newsgroups", "")
|
group := hdr.Get("Newsgroups", "")
|
||||||
ref := hdr.Get("References", "")
|
ref := hdr.Get("References", "")
|
||||||
log.Println("worker", worker, "got", msgid, "in", group, "references", ref != "")
|
log.Println("got", msgid, "in", group, "references", ref != "")
|
||||||
tpp, err := self.database.GetThreadsPerPage(group)
|
tpp, err := self.database.GetThreadsPerPage(group)
|
||||||
ppb, err := self.database.GetPagesPerBoard(group)
|
ppb, err := self.database.GetPagesPerBoard(group)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -877,6 +870,12 @@ func (self *NNTPDaemon) poll(worker int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *NNTPDaemon) poll(worker int) {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
case nntp := <-self.send_all_feeds:
|
case nntp := <-self.send_all_feeds:
|
||||||
group := nntp.Newsgroup()
|
group := nntp.Newsgroup()
|
||||||
if self.Federate() {
|
if self.Federate() {
|
||||||
|
Reference in New Issue
Block a user