Thu, 23 Mar 2023 12:14:53 +0000
client: Fix timeout handling
Previously, the timeout handler would fire an error that would get caught and
logged by the timer code. However that error never reached the upper levels of
scansion, leading to the whole thing just hanging.
Now we just trigger resumption of the async runner, and throw the error from
there if we haven't received the stanza yet.
With this change, timeouts are now correctly handled and reported as failures.
64
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 | local error_mt = { |
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 | __tostring = function (e) |
111
25530dccf696
scansion.error, client: Change error syntax slightly, so first param is identifier string
Matthew Wild <mwild1@gmail.com>
parents:
104
diff
changeset
|
3 | return tostring(e.text or e.type or ("<Scansion error: "..tostring(e)..">")); |
64
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 | end; |
104
fb915f3a9c89
scansion.error: Add __name and is() for identifying scansion errors
Matthew Wild <mwild1@gmail.com>
parents:
64
diff
changeset
|
5 | __name = "scansion error"; |
64
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 | }; |
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 | |
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 | return { |
111
25530dccf696
scansion.error, client: Change error syntax slightly, so first param is identifier string
Matthew Wild <mwild1@gmail.com>
parents:
104
diff
changeset
|
9 | new_error = function (type, data) |
25530dccf696
scansion.error, client: Change error syntax slightly, so first param is identifier string
Matthew Wild <mwild1@gmail.com>
parents:
104
diff
changeset
|
10 | return setmetatable({ type = type, text = data.text, data = data }, error_mt); |
64
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 | end; |
104
fb915f3a9c89
scansion.error: Add __name and is() for identifying scansion errors
Matthew Wild <mwild1@gmail.com>
parents:
64
diff
changeset
|
12 | is = function (err) |
fb915f3a9c89
scansion.error: Add __name and is() for identifying scansion errors
Matthew Wild <mwild1@gmail.com>
parents:
64
diff
changeset
|
13 | return getmetatable(err) == error_mt; |
fb915f3a9c89
scansion.error: Add __name and is() for identifying scansion errors
Matthew Wild <mwild1@gmail.com>
parents:
64
diff
changeset
|
14 | end; |
64
f0a1f82b8e04
scansion.error: Util for creating error objects
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 | }; |