@@ -39,6 +39,8 @@ type serport struct {
39
39
// just so we don't show scary error messages
40
40
isClosing bool
41
41
42
+ isClosingDueToError bool
43
+
42
44
// counter incremented on queue, decremented on write
43
45
itemsInBuffer int
44
46
@@ -170,6 +172,7 @@ func (p *serport) reader() {
170
172
h .broadcastSys <- []byte ("Error reading on " + p .portConf .Name + " " +
171
173
err .Error () + " Closing port." )
172
174
h .broadcastSys <- []byte ("{\" Cmd\" :\" OpenFail\" ,\" Desc\" :\" Got error reading on port. " + err .Error () + "\" ,\" Port\" :\" " + p .portConf .Name + "\" ,\" Baud\" :" + strconv .Itoa (p .portConf .Baud ) + "}" )
175
+ p .isClosingDueToError = true
173
176
break
174
177
}
175
178
@@ -179,13 +182,16 @@ func (p *serport) reader() {
179
182
if err == nil {
180
183
diff := time .Since (timeCheckOpen )
181
184
if diff .Nanoseconds () < 1000000 {
182
- p .isClosing = true
185
+ p .isClosingDueToError = true
186
+ break
183
187
}
184
188
timeCheckOpen = time .Now ()
185
189
}
186
190
}
187
191
}
188
- spCloseReal (p )
192
+ if p .isClosingDueToError {
193
+ spCloseReal (p )
194
+ }
189
195
}
190
196
191
197
// this method runs as its own thread because it's instantiated
@@ -323,6 +329,7 @@ func spHandlerOpen(portname string, baud int, buftype string) {
323
329
func spHandlerClose (p * serport ) {
324
330
p .isClosing = true
325
331
h .broadcastSys <- []byte ("Closing serial port " + p .portConf .Name )
332
+ spCloseReal (p )
326
333
}
327
334
328
335
func spCloseReal (p * serport ) {
0 commit comments