Skip to content

abandoned turn causes processes to sleep forever when handling retransmitted publishes #754

@etamme

Description

@etamme

This exists on latest master 055f4b1

Scenario: 2 PUBLISHES with the same E-Tag enter https://github.com/OpenSIPS/opensips/blob/master/modules/presence/presentity.c#L546 as a result of a retransmission.

The first publish finds the presentity, increments last turn to say 5 for the sake of argument, then it enters the while loop, finds the presentity and continues processing updating it with a new e-tag and saving it the db releases locks and finishes.

The second publish enters because its turn matches 5, it finds the presentity and increments last turn to 6, it then enters the while loop, but it fails to find the presentity because the E-Tag has been changed by the previous publish. It continues processing, but it never calls next_turn_phtable before exiting.

This will cause the process to lockup forever, waiting for its turn, on the next publish received.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions