Skip to content

Commit d80378a

Browse files
committed
parsing: EOF / queue handling for ParseNextFrame()
with this change panics should be handled better
1 parent 0a2d09a commit d80378a

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

parser_interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,5 @@ type IParser interface {
110110
111111
See also: ParseToEnd() for parsing the complete demo in one go (faster).
112112
*/
113-
ParseNextFrame() (b bool, err error)
113+
ParseNextFrame() (moreFrames bool, err error)
114114
}

parsing.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,16 @@ May panic if the demo is corrupt in some way.
133133
134134
See also: ParseToEnd() for parsing the complete demo in one go (faster).
135135
*/
136-
func (p *Parser) ParseNextFrame() (b bool, err error) {
136+
func (p *Parser) ParseNextFrame() (moreFrames bool, err error) {
137137
defer func() {
138+
// Make sure all the messages of the frame are handled
139+
p.msgDispatcher.SyncAllQueues()
140+
141+
// Close msgQueue (only if we are done)
142+
if p.msgQueue != nil && !moreFrames {
143+
close(p.msgQueue)
144+
}
145+
138146
if err == nil {
139147
err = recoverFromUnexpectedEOF(recover())
140148
}
@@ -147,17 +155,9 @@ func (p *Parser) ParseNextFrame() (b bool, err error) {
147155
}
148156
}
149157

150-
b = p.parseFrame()
151-
152-
// Make sure all the messages of the frame are handled
153-
p.msgDispatcher.SyncAllQueues()
154-
155-
// Close msgQueue if we are done
156-
if !b {
157-
close(p.msgQueue)
158-
}
158+
moreFrames = p.parseFrame()
159159

160-
return b, p.error()
160+
return moreFrames, p.error()
161161
}
162162

163163
// Demo commands as documented at https://developer.valvesoftware.com/wiki/DEM_Format

0 commit comments

Comments
 (0)