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

DO NOT MERGE Tests for async-deadlock fix #89

Closed

Conversation

jhugman
Copy link
Owner

@jhugman jhugman commented Sep 5, 2024

This is a test bed for the fix #88 .

Because it depends on a fork of the matrix-rust-sdk, and it makes network calls, we should not check this in as part of the ubrn repo.

@jhugman jhugman marked this pull request as draft September 5, 2024 17:18
@jhugman jhugman force-pushed the jhugman/fixup-async-deadlock branch from 67eb94d to e5c2539 Compare September 10, 2024 13:36
@jhugman jhugman force-pushed the jhugman/tests-for-async-deadlock branch 2 times, most recently from 3fb30a4 to 443a7a0 Compare September 10, 2024 16:57
@jhugman
Copy link
Owner Author

jhugman commented Sep 10, 2024

Added console.logs to verify ordering of the calls to and from JS.

The following test run is relatively short, but it shows:

  • each call is a call into an async function.
  • for each call, there is 1 or more polls into Rust. The polls continue until a pollResult of 0 is received.
  • there should be 4 log lines for each call's poll.
    • the order should always be Starting poll, entering callback, leaving callback, ending poll.
    • adding the setImmediate in the callback means the leave callback always happens before the ending poll and before starting the next one. This was definitely one source of deadlock.
    • adding the nextTickPromise in the while loop means the ending poll n and Starting of poll n + 1 do not always happen together.
  • changing from setTimeout() to setImmediate made the deadlocks occur more frequently / at less load. We do not want to use setTimeout and introduce arbitrary delays into the code.
  • adding the nextTickPromise to the while loop made the deadlocks occur less frequently / at greater load (i.e. things are getting better).
$ cargo xtask run --ts-dir fixtures/${fixture}/generated --cpp-dir fixtures/${fixture}/generated/cpp --crate fixtures/${fixture} fixtures/${fixture}/tests/bindings/test_${fixture//-/_}.ts --no-cargo
-- Starting delay
-- Starting the hermes event loop
-- Ending delay, measured: 1006 ms
🤓 "call 0; poll 0; handle 0: Starting poll 0"
🤓 "call 0; poll 0; handle 0:   entering callback, result = 0"
🤓 "call 0; poll 0; handle 0:   leaving  callback"
🤓 "call 0; poll 0; handle 0:   ending poll 0"
Starting…
-- About to load image 0/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 1; poll 0; handle 1: Starting poll 0"
-- About to load image 1/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 2; poll 0; handle 2: Starting poll 0"
-- About to load image 2/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 3; poll 0; handle 3: Starting poll 0"
-- About to load image 3/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 4; poll 0; handle 4: Starting poll 0"
-- About to load image 4/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 5; poll 0; handle 5: Starting poll 0"
-- About to load image 5/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 6; poll 0; handle 6: Starting poll 0"
-- About to load image 6/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 7; poll 0; handle 7: Starting poll 0"
-- About to load image 7/8: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 8; poll 0; handle 8: Starting poll 0"
🤓 "call 1; poll 0; handle 1:   entering callback, result = 1"
🤓 "call 1; poll 0; handle 1:   leaving  callback"
🤓 "call 1; poll 0; handle 1:   ending poll 0"
🤓 "call 1; poll 1; handle 9: Starting poll 1"
🤓 "call 1; poll 1; handle 9:   entering callback, result = 1"
🤓 "call 1; poll 1; handle 9:   leaving  callback"
🤓 "call 1; poll 1; handle 9:   ending poll 1"
🤓 "call 1; poll 2; handle 10: Starting poll 2"
🤓 "call 1; poll 2; handle 10:   entering callback, result = 1"
🤓 "call 1; poll 2; handle 10:   leaving  callback"
🤓 "call 1; poll 2; handle 10:   ending poll 2"
🤓 "call 1; poll 3; handle 11: Starting poll 3"
🤓 "call 1; poll 3; handle 11:   entering callback, result = 1"
🤓 "call 1; poll 3; handle 11:   leaving  callback"
🤓 "call 1; poll 3; handle 11:   ending poll 3"
🤓 "call 1; poll 4; handle 12: Starting poll 4"
🤓 "call 1; poll 4; handle 12:   entering callback, result = 1"
🤓 "call 1; poll 4; handle 12:   leaving  callback"
🤓 "call 1; poll 4; handle 12:   ending poll 4"
🤓 "call 1; poll 5; handle 13: Starting poll 5"
🤓 "call 1; poll 5; handle 13:   entering callback, result = 1"
🤓 "call 1; poll 5; handle 13:   leaving  callback"
🤓 "call 1; poll 5; handle 13:   ending poll 5"
🤓 "call 1; poll 6; handle 14: Starting poll 6"
🤓 "call 1; poll 6; handle 14:   entering callback, result = 1"
🤓 "call 1; poll 6; handle 14:   leaving  callback"
🤓 "call 1; poll 6; handle 14:   ending poll 6"
🤓 "call 1; poll 7; handle 15: Starting poll 7"
🤓 "call 2; poll 0; handle 2:   entering callback, result = 1"
🤓 "call 2; poll 0; handle 2:   leaving  callback"
🤓 "call 3; poll 0; handle 3:   entering callback, result = 1"
🤓 "call 3; poll 0; handle 3:   leaving  callback"
🤓 "call 4; poll 0; handle 4:   entering callback, result = 1"
🤓 "call 4; poll 0; handle 4:   leaving  callback"
🤓 "call 5; poll 0; handle 5:   entering callback, result = 1"
🤓 "call 5; poll 0; handle 5:   leaving  callback"
🤓 "call 6; poll 0; handle 6:   entering callback, result = 1"
🤓 "call 6; poll 0; handle 6:   leaving  callback"
🤓 "call 7; poll 0; handle 7:   entering callback, result = 1"
🤓 "call 7; poll 0; handle 7:   leaving  callback"
🤓 "call 8; poll 0; handle 8:   entering callback, result = 1"
🤓 "call 8; poll 0; handle 8:   leaving  callback"
🤓 "call 2; poll 0; handle 2:   ending poll 0"
🤓 "call 3; poll 0; handle 3:   ending poll 0"
🤓 "call 4; poll 0; handle 4:   ending poll 0"
🤓 "call 5; poll 0; handle 5:   ending poll 0"
🤓 "call 6; poll 0; handle 6:   ending poll 0"
🤓 "call 7; poll 0; handle 7:   ending poll 0"
🤓 "call 8; poll 0; handle 8:   ending poll 0"
🤓 "call 2; poll 1; handle 16: Starting poll 1"
🤓 "call 3; poll 1; handle 17: Starting poll 1"
🤓 "call 4; poll 1; handle 18: Starting poll 1"
🤓 "call 2; poll 1; handle 16:   entering callback, result = 1"
🤓 "call 2; poll 1; handle 16:   leaving  callback"
🤓 "call 5; poll 1; handle 19: Starting poll 1"
🤓 "call 3; poll 1; handle 17:   entering callback, result = 1"
🤓 "call 3; poll 1; handle 17:   leaving  callback"
🤓 "call 6; poll 1; handle 20: Starting poll 1"
🤓 "call 4; poll 1; handle 18:   entering callback, result = 1"
🤓 "call 4; poll 1; handle 18:   leaving  callback"
🤓 "call 7; poll 1; handle 21: Starting poll 1"
🤓 "call 5; poll 1; handle 19:   entering callback, result = 1"
🤓 "call 5; poll 1; handle 19:   leaving  callback"
🤓 "call 6; poll 1; handle 20:   entering callback, result = 1"
🤓 "call 6; poll 1; handle 20:   leaving  callback"
🤓 "call 7; poll 1; handle 21:   entering callback, result = 1"
🤓 "call 7; poll 1; handle 21:   leaving  callback"
🤓 "call 8; poll 1; handle 22: Starting poll 1"
🤓 "call 2; poll 1; handle 16:   ending poll 1"
🤓 "call 3; poll 1; handle 17:   ending poll 1"
🤓 "call 8; poll 1; handle 22:   entering callback, result = 1"
🤓 "call 8; poll 1; handle 22:   leaving  callback"
🤓 "call 4; poll 1; handle 18:   ending poll 1"
🤓 "call 5; poll 1; handle 19:   ending poll 1"
🤓 "call 6; poll 1; handle 20:   ending poll 1"
🤓 "call 7; poll 1; handle 21:   ending poll 1"
🤓 "call 2; poll 2; handle 23: Starting poll 2"
🤓 "call 3; poll 2; handle 24: Starting poll 2"
🤓 "call 8; poll 1; handle 22:   ending poll 1"
🤓 "call 4; poll 2; handle 25: Starting poll 2"
🤓 "call 5; poll 2; handle 26: Starting poll 2"
🤓 "call 6; poll 2; handle 27: Starting poll 2"
🤓 "call 7; poll 2; handle 28: Starting poll 2"
🤓 "call 8; poll 2; handle 29: Starting poll 2"
🤓 "call 1; poll 7; handle 15:   entering callback, result = 1"
🤓 "call 1; poll 7; handle 15:   leaving  callback"
🤓 "call 1; poll 7; handle 15:   ending poll 7"
🤓 "call 1; poll 8; handle 30: Starting poll 8"
🤓 "call 1; poll 8; handle 30:   entering callback, result = 1"
🤓 "call 1; poll 8; handle 30:   leaving  callback"
🤓 "call 1; poll 8; handle 30:   ending poll 8"
🤓 "call 2; poll 2; handle 23:   entering callback, result = 1"
🤓 "call 2; poll 2; handle 23:   leaving  callback"
🤓 "call 1; poll 9; handle 31: Starting poll 9"
🤓 "call 1; poll 9; handle 31:   entering callback, result = 0"
🤓 "call 1; poll 9; handle 31:   leaving  callback"
🤓 "call 3; poll 2; handle 24:   entering callback, result = 1"
🤓 "call 3; poll 2; handle 24:   leaving  callback"
🤓 "call 2; poll 2; handle 23:   ending poll 2"
🤓 "call 4; poll 2; handle 25:   entering callback, result = 1"
🤓 "call 4; poll 2; handle 25:   leaving  callback"
🤓 "call 1; poll 9; handle 31:   ending poll 9"
🤓 "call 6; poll 2; handle 27:   entering callback, result = 1"
🤓 "call 6; poll 2; handle 27:   leaving  callback"
🤓 "call 3; poll 2; handle 24:   ending poll 2"
🤓 "call 5; poll 2; handle 26:   entering callback, result = 1"
🤓 "call 5; poll 2; handle 26:   leaving  callback"
🤓 "call 2; poll 3; handle 32: Starting poll 3"
🤓 "call 2; poll 3; handle 32:   entering callback, result = 1"
🤓 "call 2; poll 3; handle 32:   leaving  callback"
🤓 "call 8; poll 2; handle 29:   entering callback, result = 1"
🤓 "call 8; poll 2; handle 29:   leaving  callback"
🤓 "call 4; poll 2; handle 25:   ending poll 2"
🤓 "call 7; poll 2; handle 28:   entering callback, result = 1"
🤓 "call 7; poll 2; handle 28:   leaving  callback"
-- Loaded image 0/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 6; poll 2; handle 27:   ending poll 2"
🤓 "call 3; poll 3; handle 33: Starting poll 3"
🤓 "call 5; poll 2; handle 26:   ending poll 2"
🤓 "call 2; poll 3; handle 32:   ending poll 3"
🤓 "call 8; poll 2; handle 29:   ending poll 2"
🤓 "call 4; poll 3; handle 34: Starting poll 3"
🤓 "call 7; poll 2; handle 28:   ending poll 2"
🤓 "call 6; poll 3; handle 35: Starting poll 3"
🤓 "call 5; poll 3; handle 36: Starting poll 3"
🤓 "call 2; poll 4; handle 37: Starting poll 4"
🤓 "call 8; poll 3; handle 38: Starting poll 3"
🤓 "call 7; poll 3; handle 39: Starting poll 3"
🤓 "call 3; poll 3; handle 33:   entering callback, result = 1"
🤓 "call 3; poll 3; handle 33:   leaving  callback"
🤓 "call 3; poll 3; handle 33:   ending poll 3"
🤓 "call 4; poll 3; handle 34:   entering callback, result = 1"
🤓 "call 4; poll 3; handle 34:   leaving  callback"
🤓 "call 3; poll 4; handle 40: Starting poll 4"
🤓 "call 6; poll 3; handle 35:   entering callback, result = 1"
🤓 "call 6; poll 3; handle 35:   leaving  callback"
🤓 "call 4; poll 3; handle 34:   ending poll 3"
🤓 "call 5; poll 3; handle 36:   entering callback, result = 1"
🤓 "call 5; poll 3; handle 36:   leaving  callback"
🤓 "call 6; poll 3; handle 35:   ending poll 3"
🤓 "call 8; poll 3; handle 38:   entering callback, result = 1"
🤓 "call 8; poll 3; handle 38:   leaving  callback"
🤓 "call 4; poll 4; handle 41: Starting poll 4"
🤓 "call 7; poll 3; handle 39:   entering callback, result = 1"
🤓 "call 7; poll 3; handle 39:   leaving  callback"
🤓 "call 5; poll 3; handle 36:   ending poll 3"
🤓 "call 2; poll 4; handle 37:   entering callback, result = 1"
🤓 "call 2; poll 4; handle 37:   leaving  callback"
🤓 "call 6; poll 4; handle 42: Starting poll 4"
🤓 "call 8; poll 3; handle 38:   ending poll 3"
🤓 "call 7; poll 3; handle 39:   ending poll 3"
🤓 "call 5; poll 4; handle 43: Starting poll 4"
🤓 "call 2; poll 4; handle 37:   ending poll 4"
🤓 "call 8; poll 4; handle 44: Starting poll 4"
🤓 "call 7; poll 4; handle 45: Starting poll 4"
🤓 "call 2; poll 5; handle 46: Starting poll 5"
🤓 "call 3; poll 4; handle 40:   entering callback, result = 1"
🤓 "call 3; poll 4; handle 40:   leaving  callback"
🤓 "call 2; poll 5; handle 46:   entering callback, result = 0"
🤓 "call 2; poll 5; handle 46:   leaving  callback"
🤓 "call 3; poll 4; handle 40:   ending poll 4"
🤓 "call 2; poll 5; handle 46:   ending poll 5"
🤓 "call 3; poll 5; handle 47: Starting poll 5"
-- Loaded image 1/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 4; poll 4; handle 41:   entering callback, result = 1"
🤓 "call 4; poll 4; handle 41:   leaving  callback"
🤓 "call 4; poll 4; handle 41:   ending poll 4"
🤓 "call 4; poll 5; handle 48: Starting poll 5"
🤓 "call 5; poll 4; handle 43:   entering callback, result = 1"
🤓 "call 5; poll 4; handle 43:   leaving  callback"
🤓 "call 5; poll 4; handle 43:   ending poll 4"
🤓 "call 5; poll 5; handle 49: Starting poll 5"
🤓 "call 6; poll 4; handle 42:   entering callback, result = 1"
🤓 "call 6; poll 4; handle 42:   leaving  callback"
🤓 "call 6; poll 4; handle 42:   ending poll 4"
🤓 "call 6; poll 5; handle 50: Starting poll 5"
🤓 "call 7; poll 4; handle 45:   entering callback, result = 1"
🤓 "call 7; poll 4; handle 45:   leaving  callback"
🤓 "call 7; poll 4; handle 45:   ending poll 4"
🤓 "call 7; poll 5; handle 51: Starting poll 5"
🤓 "call 8; poll 4; handle 44:   entering callback, result = 1"
🤓 "call 8; poll 4; handle 44:   leaving  callback"
🤓 "call 8; poll 4; handle 44:   ending poll 4"
🤓 "call 8; poll 5; handle 52: Starting poll 5"
🤓 "call 3; poll 5; handle 47:   entering callback, result = 1"
🤓 "call 3; poll 5; handle 47:   leaving  callback"
🤓 "call 3; poll 5; handle 47:   ending poll 5"
🤓 "call 3; poll 6; handle 53: Starting poll 6"
🤓 "call 3; poll 6; handle 53:   entering callback, result = 0"
🤓 "call 3; poll 6; handle 53:   leaving  callback"
🤓 "call 3; poll 6; handle 53:   ending poll 6"
-- Loaded image 2/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 4; poll 5; handle 48:   entering callback, result = 1"
🤓 "call 4; poll 5; handle 48:   leaving  callback"
🤓 "call 4; poll 5; handle 48:   ending poll 5"
🤓 "call 5; poll 5; handle 49:   entering callback, result = 1"
🤓 "call 5; poll 5; handle 49:   leaving  callback"
🤓 "call 4; poll 6; handle 54: Starting poll 6"
🤓 "call 6; poll 5; handle 50:   entering callback, result = 1"
🤓 "call 6; poll 5; handle 50:   leaving  callback"
🤓 "call 5; poll 5; handle 49:   ending poll 5"
🤓 "call 4; poll 6; handle 54:   entering callback, result = 1"
🤓 "call 4; poll 6; handle 54:   leaving  callback"
🤓 "call 6; poll 5; handle 50:   ending poll 5"
🤓 "call 5; poll 6; handle 55: Starting poll 6"
🤓 "call 5; poll 6; handle 55:   entering callback, result = 1"
🤓 "call 5; poll 6; handle 55:   leaving  callback"
🤓 "call 4; poll 6; handle 54:   ending poll 6"
🤓 "call 6; poll 6; handle 56: Starting poll 6"
🤓 "call 6; poll 6; handle 56:   entering callback, result = 1"
🤓 "call 6; poll 6; handle 56:   leaving  callback"
🤓 "call 5; poll 6; handle 55:   ending poll 6"
🤓 "call 7; poll 5; handle 51:   entering callback, result = 1"
🤓 "call 7; poll 5; handle 51:   leaving  callback"
🤓 "call 4; poll 7; handle 57: Starting poll 7"
🤓 "call 4; poll 7; handle 57:   entering callback, result = 0"
🤓 "call 4; poll 7; handle 57:   leaving  callback"
🤓 "call 6; poll 6; handle 56:   ending poll 6"
🤓 "call 5; poll 7; handle 58: Starting poll 7"
🤓 "call 5; poll 7; handle 58:   entering callback, result = 0"
🤓 "call 5; poll 7; handle 58:   leaving  callback"
🤓 "call 7; poll 5; handle 51:   ending poll 5"
🤓 "call 4; poll 7; handle 57:   ending poll 7"
🤓 "call 6; poll 7; handle 59: Starting poll 7"
🤓 "call 6; poll 7; handle 59:   entering callback, result = 0"
🤓 "call 6; poll 7; handle 59:   leaving  callback"
🤓 "call 8; poll 5; handle 52:   entering callback, result = 1"
🤓 "call 8; poll 5; handle 52:   leaving  callback"
🤓 "call 5; poll 7; handle 58:   ending poll 7"
🤓 "call 7; poll 6; handle 60: Starting poll 6"
🤓 "call 7; poll 6; handle 60:   entering callback, result = 1"
🤓 "call 7; poll 6; handle 60:   leaving  callback"
-- Loaded image 3/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 6; poll 7; handle 59:   ending poll 7"
🤓 "call 8; poll 5; handle 52:   ending poll 5"
-- Loaded image 4/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 7; poll 6; handle 60:   ending poll 6"
-- Loaded image 5/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 8; poll 6; handle 61: Starting poll 6"
🤓 "call 8; poll 6; handle 61:   entering callback, result = 1"
🤓 "call 8; poll 6; handle 61:   leaving  callback"
🤓 "call 7; poll 7; handle 62: Starting poll 7"
🤓 "call 7; poll 7; handle 62:   entering callback, result = 0"
🤓 "call 7; poll 7; handle 62:   leaving  callback"
🤓 "call 8; poll 6; handle 61:   ending poll 6"
🤓 "call 7; poll 7; handle 62:   ending poll 7"
🤓 "call 8; poll 7; handle 63: Starting poll 7"
🤓 "call 8; poll 7; handle 63:   entering callback, result = 0"
🤓 "call 8; poll 7; handle 63:   leaving  callback"
-- Loaded image 6/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 8; poll 7; handle 63:   ending poll 7"
-- Loaded image 7/8 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
… finished
🤓 "call 9; poll 0; handle 64: Starting poll 0"
🤓 "call 9; poll 0; handle 64:   entering callback, result = 0"
🤓 "call 9; poll 0; handle 64:   leaving  callback"
🤓 "call 9; poll 0; handle 64:   ending poll 0"
Starting…
-- About to load image 0/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 10; poll 0; handle 65: Starting poll 0"
-- About to load image 1/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 11; poll 0; handle 66: Starting poll 0"
-- About to load image 2/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 12; poll 0; handle 67: Starting poll 0"
-- About to load image 3/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 13; poll 0; handle 68: Starting poll 0"
-- About to load image 4/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 14; poll 0; handle 69: Starting poll 0"
-- About to load image 5/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 15; poll 0; handle 70: Starting poll 0"
-- About to load image 6/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 16; poll 0; handle 71: Starting poll 0"
-- About to load image 7/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 17; poll 0; handle 72: Starting poll 0"
-- About to load image 8/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 18; poll 0; handle 73: Starting poll 0"
-- About to load image 9/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 19; poll 0; handle 74: Starting poll 0"
-- About to load image 10/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 20; poll 0; handle 75: Starting poll 0"
-- About to load image 11/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 21; poll 0; handle 76: Starting poll 0"
-- About to load image 12/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 22; poll 0; handle 77: Starting poll 0"
-- About to load image 13/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 23; poll 0; handle 78: Starting poll 0"
-- About to load image 14/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 24; poll 0; handle 79: Starting poll 0"
-- About to load image 15/16: mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 25; poll 0; handle 80: Starting poll 0"
🤓 "call 10; poll 0; handle 65:   entering callback, result = 1"
🤓 "call 10; poll 0; handle 65:   leaving  callback"
🤓 "call 10; poll 0; handle 65:   ending poll 0"
🤓 "call 10; poll 1; handle 81: Starting poll 1"
🤓 "call 10; poll 1; handle 81:   entering callback, result = 1"
🤓 "call 10; poll 1; handle 81:   leaving  callback"
🤓 "call 10; poll 1; handle 81:   ending poll 1"
🤓 "call 10; poll 2; handle 82: Starting poll 2"
🤓 "call 10; poll 2; handle 82:   entering callback, result = 1"
🤓 "call 10; poll 2; handle 82:   leaving  callback"
🤓 "call 10; poll 2; handle 82:   ending poll 2"
🤓 "call 10; poll 3; handle 83: Starting poll 3"
🤓 "call 10; poll 3; handle 83:   entering callback, result = 1"
🤓 "call 10; poll 3; handle 83:   leaving  callback"
🤓 "call 10; poll 3; handle 83:   ending poll 3"
🤓 "call 10; poll 4; handle 84: Starting poll 4"
🤓 "call 10; poll 4; handle 84:   entering callback, result = 1"
🤓 "call 10; poll 4; handle 84:   leaving  callback"
🤓 "call 10; poll 4; handle 84:   ending poll 4"
🤓 "call 10; poll 5; handle 85: Starting poll 5"
🤓 "call 10; poll 5; handle 85:   entering callback, result = 1"
🤓 "call 10; poll 5; handle 85:   leaving  callback"
🤓 "call 10; poll 5; handle 85:   ending poll 5"
🤓 "call 10; poll 6; handle 86: Starting poll 6"
🤓 "call 10; poll 6; handle 86:   entering callback, result = 1"
🤓 "call 10; poll 6; handle 86:   leaving  callback"
🤓 "call 10; poll 6; handle 86:   ending poll 6"
🤓 "call 10; poll 7; handle 87: Starting poll 7"
🤓 "call 11; poll 0; handle 66:   entering callback, result = 1"
🤓 "call 11; poll 0; handle 66:   leaving  callback"
🤓 "call 12; poll 0; handle 67:   entering callback, result = 1"
🤓 "call 12; poll 0; handle 67:   leaving  callback"
🤓 "call 13; poll 0; handle 68:   entering callback, result = 1"
🤓 "call 13; poll 0; handle 68:   leaving  callback"
🤓 "call 14; poll 0; handle 69:   entering callback, result = 1"
🤓 "call 14; poll 0; handle 69:   leaving  callback"
🤓 "call 15; poll 0; handle 70:   entering callback, result = 1"
🤓 "call 15; poll 0; handle 70:   leaving  callback"
🤓 "call 16; poll 0; handle 71:   entering callback, result = 1"
🤓 "call 16; poll 0; handle 71:   leaving  callback"
🤓 "call 17; poll 0; handle 72:   entering callback, result = 1"
🤓 "call 17; poll 0; handle 72:   leaving  callback"
🤓 "call 18; poll 0; handle 73:   entering callback, result = 1"
🤓 "call 18; poll 0; handle 73:   leaving  callback"
🤓 "call 19; poll 0; handle 74:   entering callback, result = 1"
🤓 "call 19; poll 0; handle 74:   leaving  callback"
🤓 "call 20; poll 0; handle 75:   entering callback, result = 1"
🤓 "call 20; poll 0; handle 75:   leaving  callback"
🤓 "call 21; poll 0; handle 76:   entering callback, result = 1"
🤓 "call 21; poll 0; handle 76:   leaving  callback"
🤓 "call 22; poll 0; handle 77:   entering callback, result = 1"
🤓 "call 22; poll 0; handle 77:   leaving  callback"
🤓 "call 23; poll 0; handle 78:   entering callback, result = 1"
🤓 "call 23; poll 0; handle 78:   leaving  callback"
🤓 "call 24; poll 0; handle 79:   entering callback, result = 1"
🤓 "call 24; poll 0; handle 79:   leaving  callback"
🤓 "call 25; poll 0; handle 80:   entering callback, result = 1"
🤓 "call 25; poll 0; handle 80:   leaving  callback"
🤓 "call 11; poll 0; handle 66:   ending poll 0"
🤓 "call 12; poll 0; handle 67:   ending poll 0"
🤓 "call 13; poll 0; handle 68:   ending poll 0"
🤓 "call 14; poll 0; handle 69:   ending poll 0"
🤓 "call 15; poll 0; handle 70:   ending poll 0"
🤓 "call 16; poll 0; handle 71:   ending poll 0"
🤓 "call 17; poll 0; handle 72:   ending poll 0"
🤓 "call 18; poll 0; handle 73:   ending poll 0"
🤓 "call 19; poll 0; handle 74:   ending poll 0"
🤓 "call 20; poll 0; handle 75:   ending poll 0"
🤓 "call 21; poll 0; handle 76:   ending poll 0"
🤓 "call 22; poll 0; handle 77:   ending poll 0"
🤓 "call 23; poll 0; handle 78:   ending poll 0"
🤓 "call 24; poll 0; handle 79:   ending poll 0"
🤓 "call 25; poll 0; handle 80:   ending poll 0"
🤓 "call 11; poll 1; handle 88: Starting poll 1"
🤓 "call 12; poll 1; handle 89: Starting poll 1"
🤓 "call 11; poll 1; handle 88:   entering callback, result = 1"
🤓 "call 11; poll 1; handle 88:   leaving  callback"
🤓 "call 12; poll 1; handle 89:   entering callback, result = 1"
🤓 "call 12; poll 1; handle 89:   leaving  callback"
🤓 "call 13; poll 1; handle 90: Starting poll 1"
🤓 "call 14; poll 1; handle 91: Starting poll 1"
🤓 "call 15; poll 1; handle 92: Starting poll 1"
🤓 "call 14; poll 1; handle 91:   entering callback, result = 1"
🤓 "call 14; poll 1; handle 91:   leaving  callback"
🤓 "call 13; poll 1; handle 90:   entering callback, result = 1"
🤓 "call 13; poll 1; handle 90:   leaving  callback"
🤓 "call 15; poll 1; handle 92:   entering callback, result = 1"
🤓 "call 15; poll 1; handle 92:   leaving  callback"
🤓 "call 16; poll 1; handle 93: Starting poll 1"
🤓 "call 17; poll 1; handle 94: Starting poll 1"
🤓 "call 18; poll 1; handle 95: Starting poll 1"
🤓 "call 17; poll 1; handle 94:   entering callback, result = 1"
🤓 "call 17; poll 1; handle 94:   leaving  callback"
🤓 "call 16; poll 1; handle 93:   entering callback, result = 1"
🤓 "call 16; poll 1; handle 93:   leaving  callback"
🤓 "call 18; poll 1; handle 95:   entering callback, result = 1"
🤓 "call 18; poll 1; handle 95:   leaving  callback"
🤓 "call 19; poll 1; handle 96: Starting poll 1"
🤓 "call 20; poll 1; handle 97: Starting poll 1"
🤓 "call 19; poll 1; handle 96:   entering callback, result = 1"
🤓 "call 19; poll 1; handle 96:   leaving  callback"
🤓 "call 20; poll 1; handle 97:   entering callback, result = 1"
🤓 "call 20; poll 1; handle 97:   leaving  callback"
🤓 "call 21; poll 1; handle 98: Starting poll 1"
🤓 "call 22; poll 1; handle 99: Starting poll 1"
🤓 "call 23; poll 1; handle 100: Starting poll 1"
🤓 "call 24; poll 1; handle 101: Starting poll 1"
🤓 "call 25; poll 1; handle 102: Starting poll 1"
🤓 "call 11; poll 1; handle 88:   ending poll 1"
🤓 "call 12; poll 1; handle 89:   ending poll 1"
🤓 "call 23; poll 1; handle 100:   entering callback, result = 1"
🤓 "call 23; poll 1; handle 100:   leaving  callback"
🤓 "call 22; poll 1; handle 99:   entering callback, result = 1"
🤓 "call 22; poll 1; handle 99:   leaving  callback"
🤓 "call 21; poll 1; handle 98:   entering callback, result = 1"
🤓 "call 21; poll 1; handle 98:   leaving  callback"
🤓 "call 24; poll 1; handle 101:   entering callback, result = 1"
🤓 "call 24; poll 1; handle 101:   leaving  callback"
🤓 "call 25; poll 1; handle 102:   entering callback, result = 1"
🤓 "call 25; poll 1; handle 102:   leaving  callback"
🤓 "call 14; poll 1; handle 91:   ending poll 1"
🤓 "call 13; poll 1; handle 90:   ending poll 1"
🤓 "call 15; poll 1; handle 92:   ending poll 1"
🤓 "call 17; poll 1; handle 94:   ending poll 1"
🤓 "call 16; poll 1; handle 93:   ending poll 1"
🤓 "call 18; poll 1; handle 95:   ending poll 1"
🤓 "call 19; poll 1; handle 96:   ending poll 1"
🤓 "call 20; poll 1; handle 97:   ending poll 1"
🤓 "call 11; poll 2; handle 103: Starting poll 2"
🤓 "call 12; poll 2; handle 104: Starting poll 2"
🤓 "call 23; poll 1; handle 100:   ending poll 1"
🤓 "call 22; poll 1; handle 99:   ending poll 1"
🤓 "call 21; poll 1; handle 98:   ending poll 1"
🤓 "call 24; poll 1; handle 101:   ending poll 1"
🤓 "call 25; poll 1; handle 102:   ending poll 1"
🤓 "call 14; poll 2; handle 105: Starting poll 2"
🤓 "call 13; poll 2; handle 106: Starting poll 2"
🤓 "call 15; poll 2; handle 107: Starting poll 2"
🤓 "call 17; poll 2; handle 108: Starting poll 2"
🤓 "call 16; poll 2; handle 109: Starting poll 2"
🤓 "call 18; poll 2; handle 110: Starting poll 2"
🤓 "call 19; poll 2; handle 111: Starting poll 2"
🤓 "call 20; poll 2; handle 112: Starting poll 2"
🤓 "call 23; poll 2; handle 113: Starting poll 2"
🤓 "call 22; poll 2; handle 114: Starting poll 2"
🤓 "call 21; poll 2; handle 115: Starting poll 2"
🤓 "call 24; poll 2; handle 116: Starting poll 2"
🤓 "call 25; poll 2; handle 117: Starting poll 2"
🤓 "call 10; poll 7; handle 87:   entering callback, result = 1"
🤓 "call 10; poll 7; handle 87:   leaving  callback"
🤓 "call 10; poll 7; handle 87:   ending poll 7"
🤓 "call 10; poll 8; handle 118: Starting poll 8"
🤓 "call 10; poll 8; handle 118:   entering callback, result = 1"
🤓 "call 10; poll 8; handle 118:   leaving  callback"
🤓 "call 10; poll 8; handle 118:   ending poll 8"
🤓 "call 11; poll 2; handle 103:   entering callback, result = 1"
🤓 "call 11; poll 2; handle 103:   leaving  callback"
🤓 "call 10; poll 9; handle 119: Starting poll 9"
🤓 "call 10; poll 9; handle 119:   entering callback, result = 0"
🤓 "call 10; poll 9; handle 119:   leaving  callback"
🤓 "call 11; poll 2; handle 103:   ending poll 2"
🤓 "call 10; poll 9; handle 119:   ending poll 9"
🤓 "call 11; poll 3; handle 120: Starting poll 3"
-- Loaded image 0/16 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 12; poll 2; handle 104:   entering callback, result = 1"
🤓 "call 12; poll 2; handle 104:   leaving  callback"
🤓 "call 12; poll 2; handle 104:   ending poll 2"
🤓 "call 12; poll 3; handle 121: Starting poll 3"
🤓 "call 15; poll 2; handle 107:   entering callback, result = 1"
🤓 "call 15; poll 2; handle 107:   leaving  callback"
🤓 "call 15; poll 2; handle 107:   ending poll 2"
🤓 "call 17; poll 2; handle 108:   entering callback, result = 1"
🤓 "call 17; poll 2; handle 108:   leaving  callback"
🤓 "call 15; poll 3; handle 122: Starting poll 3"
🤓 "call 14; poll 2; handle 105:   entering callback, result = 1"
🤓 "call 14; poll 2; handle 105:   leaving  callback"
🤓 "call 17; poll 2; handle 108:   ending poll 2"
🤓 "call 20; poll 2; handle 112:   entering callback, result = 1"
🤓 "call 20; poll 2; handle 112:   leaving  callback"
🤓 "call 14; poll 2; handle 105:   ending poll 2"
🤓 "call 19; poll 2; handle 111:   entering callback, result = 1"
🤓 "call 19; poll 2; handle 111:   leaving  callback"
🤓 "call 17; poll 3; handle 123: Starting poll 3"
🤓 "call 18; poll 2; handle 110:   entering callback, result = 1"
🤓 "call 18; poll 2; handle 110:   leaving  callback"
🤓 "call 20; poll 2; handle 112:   ending poll 2"
🤓 "call 13; poll 2; handle 106:   entering callback, result = 1"
🤓 "call 13; poll 2; handle 106:   leaving  callback"
🤓 "call 14; poll 3; handle 124: Starting poll 3"
🤓 "call 22; poll 2; handle 114:   entering callback, result = 1"
🤓 "call 22; poll 2; handle 114:   leaving  callback"
🤓 "call 19; poll 2; handle 111:   ending poll 2"
🤓 "call 23; poll 2; handle 113:   entering callback, result = 1"
🤓 "call 23; poll 2; handle 113:   leaving  callback"
🤓 "call 18; poll 2; handle 110:   ending poll 2"
🤓 "call 21; poll 2; handle 115:   entering callback, result = 1"
🤓 "call 21; poll 2; handle 115:   leaving  callback"
🤓 "call 20; poll 3; handle 125: Starting poll 3"
🤓 "call 16; poll 2; handle 109:   entering callback, result = 1"
🤓 "call 16; poll 2; handle 109:   leaving  callback"
🤓 "call 13; poll 2; handle 106:   ending poll 2"
🤓 "call 25; poll 2; handle 117:   entering callback, result = 1"
🤓 "call 25; poll 2; handle 117:   leaving  callback"
🤓 "call 22; poll 2; handle 114:   ending poll 2"
🤓 "call 24; poll 2; handle 116:   entering callback, result = 1"
🤓 "call 24; poll 2; handle 116:   leaving  callback"
🤓 "call 19; poll 3; handle 126: Starting poll 3"
🤓 "call 23; poll 2; handle 113:   ending poll 2"
🤓 "call 18; poll 3; handle 127: Starting poll 3"
🤓 "call 21; poll 2; handle 115:   ending poll 2"
🤓 "call 16; poll 2; handle 109:   ending poll 2"
🤓 "call 13; poll 3; handle 128: Starting poll 3"
🤓 "call 25; poll 2; handle 117:   ending poll 2"
🤓 "call 22; poll 3; handle 129: Starting poll 3"
🤓 "call 24; poll 2; handle 116:   ending poll 2"
🤓 "call 23; poll 3; handle 130: Starting poll 3"
🤓 "call 21; poll 3; handle 131: Starting poll 3"
🤓 "call 16; poll 3; handle 132: Starting poll 3"
🤓 "call 25; poll 3; handle 133: Starting poll 3"
🤓 "call 24; poll 3; handle 134: Starting poll 3"
🤓 "call 11; poll 3; handle 120:   entering callback, result = 1"
🤓 "call 11; poll 3; handle 120:   leaving  callback"
🤓 "call 11; poll 3; handle 120:   ending poll 3"
🤓 "call 11; poll 4; handle 135: Starting poll 4"
🤓 "call 12; poll 3; handle 121:   entering callback, result = 1"
🤓 "call 12; poll 3; handle 121:   leaving  callback"
🤓 "call 11; poll 4; handle 135:   entering callback, result = 0"
🤓 "call 11; poll 4; handle 135:   leaving  callback"
🤓 "call 12; poll 3; handle 121:   ending poll 3"
🤓 "call 11; poll 4; handle 135:   ending poll 4"
🤓 "call 12; poll 4; handle 136: Starting poll 4"
-- Loaded image 1/16 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 15; poll 3; handle 122:   entering callback, result = 1"
🤓 "call 15; poll 3; handle 122:   leaving  callback"
🤓 "call 15; poll 3; handle 122:   ending poll 3"
🤓 "call 17; poll 3; handle 123:   entering callback, result = 1"
🤓 "call 17; poll 3; handle 123:   leaving  callback"
🤓 "call 15; poll 4; handle 137: Starting poll 4"
🤓 "call 20; poll 3; handle 125:   entering callback, result = 1"
🤓 "call 20; poll 3; handle 125:   leaving  callback"
🤓 "call 17; poll 3; handle 123:   ending poll 3"
🤓 "call 14; poll 3; handle 124:   entering callback, result = 1"
🤓 "call 14; poll 3; handle 124:   leaving  callback"
🤓 "call 20; poll 3; handle 125:   ending poll 3"
🤓 "call 19; poll 3; handle 126:   entering callback, result = 1"
🤓 "call 19; poll 3; handle 126:   leaving  callback"
🤓 "call 17; poll 4; handle 138: Starting poll 4"
🤓 "call 18; poll 3; handle 127:   entering callback, result = 1"
🤓 "call 18; poll 3; handle 127:   leaving  callback"
🤓 "call 14; poll 3; handle 124:   ending poll 3"
🤓 "call 22; poll 3; handle 129:   entering callback, result = 1"
🤓 "call 22; poll 3; handle 129:   leaving  callback"
🤓 "call 20; poll 4; handle 139: Starting poll 4"
🤓 "call 23; poll 3; handle 130:   entering callback, result = 1"
🤓 "call 23; poll 3; handle 130:   leaving  callback"
🤓 "call 19; poll 3; handle 126:   ending poll 3"
🤓 "call 25; poll 3; handle 133:   entering callback, result = 1"
🤓 "call 25; poll 3; handle 133:   leaving  callback"
🤓 "call 18; poll 3; handle 127:   ending poll 3"
🤓 "call 21; poll 3; handle 131:   entering callback, result = 1"
🤓 "call 21; poll 3; handle 131:   leaving  callback"
🤓 "call 14; poll 4; handle 140: Starting poll 4"
🤓 "call 13; poll 3; handle 128:   entering callback, result = 1"
🤓 "call 13; poll 3; handle 128:   leaving  callback"
🤓 "call 22; poll 3; handle 129:   ending poll 3"
🤓 "call 24; poll 3; handle 134:   entering callback, result = 1"
🤓 "call 24; poll 3; handle 134:   leaving  callback"
🤓 "call 23; poll 3; handle 130:   ending poll 3"
🤓 "call 16; poll 3; handle 132:   entering callback, result = 1"
🤓 "call 16; poll 3; handle 132:   leaving  callback"
🤓 "call 19; poll 4; handle 141: Starting poll 4"
🤓 "call 12; poll 4; handle 136:   entering callback, result = 1"
🤓 "call 12; poll 4; handle 136:   leaving  callback"
🤓 "call 25; poll 3; handle 133:   ending poll 3"
🤓 "call 18; poll 4; handle 142: Starting poll 4"
🤓 "call 21; poll 3; handle 131:   ending poll 3"
🤓 "call 13; poll 3; handle 128:   ending poll 3"
🤓 "call 22; poll 4; handle 143: Starting poll 4"
🤓 "call 24; poll 3; handle 134:   ending poll 3"
🤓 "call 23; poll 4; handle 144: Starting poll 4"
🤓 "call 16; poll 3; handle 132:   ending poll 3"
🤓 "call 12; poll 4; handle 136:   ending poll 4"
🤓 "call 25; poll 4; handle 145: Starting poll 4"
🤓 "call 21; poll 4; handle 146: Starting poll 4"
🤓 "call 13; poll 4; handle 147: Starting poll 4"
🤓 "call 13; poll 4; handle 147:   entering callback, result = 1"
🤓 "call 13; poll 4; handle 147:   leaving  callback"
🤓 "call 24; poll 4; handle 148: Starting poll 4"
🤓 "call 16; poll 4; handle 149: Starting poll 4"
🤓 "call 12; poll 5; handle 150: Starting poll 5"
🤓 "call 14; poll 4; handle 140:   entering callback, result = 1"
🤓 "call 14; poll 4; handle 140:   leaving  callback"
🤓 "call 12; poll 5; handle 150:   entering callback, result = 0"
🤓 "call 12; poll 5; handle 150:   leaving  callback"
🤓 "call 13; poll 4; handle 147:   ending poll 4"
🤓 "call 14; poll 4; handle 140:   ending poll 4"
🤓 "call 12; poll 5; handle 150:   ending poll 5"
🤓 "call 13; poll 5; handle 151: Starting poll 5"
🤓 "call 14; poll 5; handle 152: Starting poll 5"
-- Loaded image 2/16 mxc://matrix.1badday.com/RUUIKNjovSSwYbULWuNQarDA
🤓 "call 15; poll 4; handle 137:   entering callback, result = 1"
🤓 "call 15; poll 4; handle 137:   leaving  callback"
🤓 "call 15; poll 4; handle 137:   ending poll 4"
🤓 "call 15; poll 5; handle 153: Starting poll 5"
🤓 "call 15; poll 5; handle 153:   entering callback, result = 1"
🤓 "call 15; poll 5; handle 153:   leaving  callback"
🤓 "call 15; poll 5; handle 153:   ending poll 5"
🤓 "call 15; poll 6; handle 154: Starting poll 6"
🤓 "call 15; poll 6; handle 154:   entering callback, result = 1"
🤓 "call 15; poll 6; handle 154:   leaving  callback"
🤓 "call 17; poll 4; handle 138:   entering callback, result = 1"
🤓 "call 17; poll 4; handle 138:   leaving  callback"
🤓 "call 15; poll 6; handle 154:   ending poll 6"
🤓 "call 16; poll 4; handle 149:   entering callback, result = 1"
🤓 "call 16; poll 4; handle 149:   leaving  callback"
🤓 "call 17; poll 4; handle 138:   ending poll 4"
🤓 "call 20; poll 4; handle 139:   entering callback, result = 1"
🤓 "call 20; poll 4; handle 139:   leaving  callback"
🤓 "call 15; poll 7; handle 155: Starting poll 7"
🤓 "call 16; poll 4; handle 149:   ending poll 4"
🤓 "call 17; poll 5; handle 156: Starting poll 5"
🤓 "call 17; poll 5; handle 156:   entering callback, result = 1"
🤓 "call 17; poll 5; handle 156:   leaving  callback"
🤓 "call 20; poll 4; handle 139:   ending poll 4"
🤓 "call 16; poll 5; handle 157: Starting poll 5"
🤓 "call 17; poll 5; handle 156:   ending poll 5"
🤓 "call 20; poll 5; handle 158: Starting poll 5"
🤓 "call 20; poll 5; handle 158:   entering callback, result = 1"
🤓 "call 20; poll 5; handle 158:   leaving  callback"
🤓 "call 17; poll 6; handle 159: Starting poll 6"
🤓 "call 20; poll 5; handle 158:   ending poll 5"
🤓 "call 20; poll 6; handle 160: Starting poll 6"

/cc @zzorba

@zzorba
Copy link
Collaborator

zzorba commented Sep 10, 2024

Thank you for update -- very informative.

Let me know if it's worth trying to incorporate this into my test branch.

@jhugman jhugman force-pushed the jhugman/fixup-async-deadlock branch 2 times, most recently from 49085d4 to 422bd95 Compare September 16, 2024 18:35
@jhugman jhugman force-pushed the jhugman/fixup-async-deadlock branch from 422bd95 to d0b5904 Compare September 16, 2024 18:53
@jhugman jhugman force-pushed the jhugman/tests-for-async-deadlock branch from 443a7a0 to 56ce2e9 Compare September 17, 2024 16:10
@jhugman jhugman force-pushed the jhugman/fixup-async-deadlock branch from d0b5904 to 86a80c1 Compare September 17, 2024 16:29
@jhugman jhugman closed this in #88 Sep 17, 2024
@jhugman jhugman closed this in 404b003 Sep 17, 2024
@jhugman jhugman deleted the jhugman/tests-for-async-deadlock branch November 3, 2024 19:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants