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

nksip_router:resend_worklist function might cause calling process to hang for gen_server:call timeout #86

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

pickme467
Copy link

The scenario:

  1. There is sip dialog opened
  2. SIP BYE arrives and sip_bye callback is being called
  3. Client notified by sip_bye callback calls nksip_request:reply
  4. nksip_router sends work to its nksip_call_srv worker process
  5. Meanwhile dialog is closed and nksip_call_srv process stops without
    notifying nksip_router that it started processing the next work
  6. nksip_router receives 'DOWN' message from stopped process and
    calls nksip_router:resend_worklist
  7. nksip_call_srv:find_call is executed, but it doesn't check if found
    Pid is of alive process, it just checks that it is the valid pid
  8. nksip_router sends work as gen_server:cast to not exisnting
    process, so it will never call gen_server:reply to calling process,
    causing calling process to wait till timeout.

The solution:
make nksip_call_srv:find_call function to check if process is alive

Pawel Wlodyga added 2 commits September 1, 2020 12:26
nksip_router:resend_worklist function might cause calling process to
hang for gen_server:call timeout

The scenario:

1. There is sip dialog opened
2. SIP BYE arrives and sip_bye callback is being called
3. Client notified by sip_bye callback calls nksip_request:reply
4. nksip_router sends work to its nksip_call_srv worker process
5. Meanwhile dialog is closed and nksip_call_srv process stops without
   notifying nksip_router that it started processing the next work
6. nksip_router receives 'DOWN' message from stopped process and
   calls nksip_router:resend_worklist
7. nksip_call_srv:find_call is executed, but it doesn't check if found
   Pid is of alive process, it just checks that it is the valid pid
8. nksip_router sends work as gen_server:cast to not exisnting
   process, so it will never call gen_server:reply to calling process,
   causing calling process to wait till timeout.

The solution:
make nksip_call_srv:find_call function to check if process is alive
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.

1 participant