Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve ?= usage #35

Merged
merged 1 commit into from
Dec 18, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 26 additions & 36 deletions src/hyperx/clientserver.nim
Original file line number Diff line number Diff line change
Expand Up @@ -335,19 +335,17 @@ proc send(client: ClientContext, frm: Frame) {.async.} =
try:
await client.sendNaked(frm)
except HyperxConnError as err:
if client.isConnected:
debugInfo err.getStackTrace()
debugInfo err.msg
client.error = newError err
client.close()
debugInfo err.getStackTrace()
debugInfo err.msg
client.error ?= newError err
client.close()
raise err
except OsError, SslError:
let err = getCurrentException()
if client.isConnected:
debugInfo err.getStackTrace()
debugInfo err.msg
client.error = newConnError(err.msg)
client.close()
debugInfo err.getStackTrace()
debugInfo err.msg
client.error ?= newConnError(err.msg)
client.close()
raise newConnError(err.msg)

proc sendSilently(client: ClientContext, frm: Frame) {.async.} =
Expand Down Expand Up @@ -412,7 +410,7 @@ proc handshake(client: ClientContext) {.async.} =
debugInfo err.msg
doAssert client.isConnected
# XXX err.msg includes a traceback for SslError but it should not
client.error = newConnError(err.msg)
client.error ?= newConnError(err.msg)
client.close()
raise newConnError(err.msg)

Expand Down Expand Up @@ -526,18 +524,16 @@ proc recvTask(client: ClientContext) {.async.} =
except HyperxConnError as err:
debugInfo err.getStackTrace()
debugInfo err.msg
if client.isConnected:
client.error = newError err
await client.sendSilently newGoAwayFrame(
client.maxPeerStreamIdSeen, err.code
)
client.error ?= newError err
await client.sendSilently newGoAwayFrame(
client.maxPeerStreamIdSeen, err.code
)
raise err
except OsError, SslError:
let err = getCurrentException()
debugInfo err.getStackTrace()
debugInfo err.msg
if client.isConnected:
client.error = newConnError(err.msg)
client.error ?= newConnError(err.msg)
raise newConnError(err.msg)
except CatchableError as err:
debugInfo err.getStackTrace()
Expand Down Expand Up @@ -715,11 +711,10 @@ proc recvDispatcher(client: ClientContext) {.async.} =
except HyperxConnError as err:
debugInfo err.getStackTrace()
debugInfo err.msg
if client.isConnected:
client.error = newError err
await client.sendSilently newGoAwayFrame(
client.maxPeerStreamIdSeen, err.code
)
client.error ?= newError err
await client.sendSilently newGoAwayFrame(
client.maxPeerStreamIdSeen, err.code
)
raise err
except HyperxStrmError:
debugInfo getCurrentException().getStackTrace()
Expand Down Expand Up @@ -750,10 +745,9 @@ proc windowUpdateTask(client: ClientContext) {.async.} =
except QueueClosedError:
doAssert not client.isConnected
except HyperxConnError as err:
if client.isConnected:
debugInfo err.getStackTrace()
debugInfo err.msg
client.error = newError err
debugInfo err.getStackTrace()
debugInfo err.msg
client.error ?= newError err
raise err
except CatchableError as err:
debugInfo err.getStackTrace()
Expand Down Expand Up @@ -1016,7 +1010,6 @@ proc recvBodyTaskNaked(strm: ClientStream) {.async.} =
proc recvTask(strm: ClientStream) {.async.} =
template client: untyped = strm.client
template stream: untyped = strm.stream
var connErr = false
try:
await recvHeadersTaskNaked(strm)
if strm.stateRecv != csStateEnded:
Expand All @@ -1028,12 +1021,11 @@ proc recvTask(strm: ClientStream) {.async.} =
except HyperxConnError as err:
debugInfo err.getStackTrace()
debugInfo err.msg
connErr = true
if client.isConnected:
client.error = newError err
await client.sendSilently newGoAwayFrame(
client.maxPeerStreamIdSeen, err.code
)
client.error ?= newError err
await client.sendSilently newGoAwayFrame(
client.maxPeerStreamIdSeen, err.code
)
client.close()
raise err
except HyperxStrmError as err:
debugInfo err.getStackTrace()
Expand All @@ -1047,8 +1039,6 @@ proc recvTask(strm: ClientStream) {.async.} =
debugInfo err.msg
raise err
finally:
if connErr:
client.close()
strm.close()

proc recvHeadersNaked(strm: ClientStream, data: ref string) {.async.} =
Expand Down
Loading