Skip to content

Race condition sending subscription while socket is connected, but before op=connected #46

Description

@jhansche
  1. Subscribe to queryA
    • it is not connected yet, so it will trigger reconnect.
  2. Socket opens, thus state=CONNECTED
    • Sends op=connect
  3. Subscribe to queryB
    • SOCKET is connected (state=CONNECTED), but we haven't received op=connected yet.
    • BUG: it will call sendSubscription now, because it only checks current state
  4. Server responds to (2) with op=connected
  5. On op=connected, we replay pending subscriptions, including the one that was already sent in (3)

That results in sending JSON over the socket in this order:

  1. socket CONNECT
  2. send op=connect
  3. send op=subscribe (query A)
  4. receive op=connected
  5. send op=subscribe (query A)
  6. send op=subscribe (query B)

That results in having 2 subscriptions for query A, and one for query B, when we should only have one of each.

I have a unit test that proves this, and a fix will be forthcoming.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions