fix: two-player lobby deadlock
This commit is contained in:
@@ -48,11 +48,13 @@ session_result_t session_manager_join(session_manager_t *manager, role_t request
|
||||
char sanitized[kDisplayNameBytes + 1] = {0};
|
||||
if (!sanitize_name(name, sanitized)) return SESSION_RESULT_INVALID_NAME;
|
||||
int8_t selected = -1;
|
||||
if (requested_role == ROLE_PLAYER_1) selected = first_free(manager, 0, 1);
|
||||
if (requested_role == ROLE_AUTO_PLAYER) selected = first_free(manager, 0, kPlayerCapacity);
|
||||
else if (requested_role == ROLE_PLAYER_1) selected = first_free(manager, 0, 1);
|
||||
else if (requested_role == ROLE_PLAYER_2) selected = first_free(manager, 1, 2);
|
||||
else if (requested_role == ROLE_SPECTATOR) selected = first_free(manager, kPlayerCapacity, kSessionCapacity);
|
||||
else return SESSION_RESULT_INVALID_ROLE;
|
||||
if (selected < 0) return requested_role == ROLE_SPECTATOR ? SESSION_RESULT_NO_SPECTATOR_SLOT : SESSION_RESULT_NO_PLAYER_SLOT;
|
||||
if (requested_role == ROLE_AUTO_PLAYER) requested_role = (role_t)selected;
|
||||
session_t candidate = {.role = requested_role, .occupied = true, .connected = true};
|
||||
memcpy(candidate.name, sanitized, sizeof(candidate.name));
|
||||
for (uint8_t offset = 0; offset < kSessionTokenBytes; offset += 4) {
|
||||
|
||||
Reference in New Issue
Block a user