Prevent a mysterious crash in NBC
This commit is contained in:
parent
2c87f53c03
commit
6ce0472ec0
2 changed files with 14 additions and 1 deletions
|
|
@ -59,6 +59,11 @@ proc close*(s: var InputStream) {.raises: [IOError, Defect].} =
|
|||
s.vtable.closeSync(s)
|
||||
s = nil
|
||||
|
||||
proc preventFurtherReading(s: InputStream) =
|
||||
s.vtable = nil
|
||||
s.head = nil
|
||||
s.bufferEnd = nil
|
||||
|
||||
proc `=destroy`*(h: var InputStreamHandle) {.raises: [Defect].} =
|
||||
if h.s != nil:
|
||||
if h.s.vtable != nil and h.s.vtable.closeSync != nil:
|
||||
|
|
@ -69,7 +74,13 @@ proc `=destroy`*(h: var InputStreamHandle) {.raises: [Defect].} =
|
|||
# If the user wanted to handle the error, they would have called
|
||||
# `close` manually.
|
||||
discard # TODO
|
||||
h.s = nil
|
||||
# TODO ATTENTION!
|
||||
# Uncommenting the following line will lead to a GC heap corruption.
|
||||
# Most likely this leads to Nim collecting some object prematurely.
|
||||
# h.s = nil
|
||||
# We work-around the problem through more indirect incapacitatation
|
||||
# of the stream object:
|
||||
h.s.preventFurtherReading()
|
||||
|
||||
converter implicitDeref*(h: InputStreamHandle): InputStream =
|
||||
h.s
|
||||
|
|
|
|||
|
|
@ -114,11 +114,13 @@ proc flipPage(s: OutputStream) =
|
|||
s.endPos += s.pageSize
|
||||
|
||||
proc addPage(s: OutputStream) =
|
||||
doAssert s.pageSize > 0
|
||||
s.pages.addLast OutputPage(buffer: newString(s.pageSize),
|
||||
startOffset: 0)
|
||||
s.flipPage
|
||||
|
||||
proc initWithSinglePage*(s: OutputStream) =
|
||||
s.pages = initDeque[OutputPage]()
|
||||
s.addPage()
|
||||
s.cursor.stream = s
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue