Skip to content

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

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
@pickme467 pickme467 closed this Sep 1, 2020
@kalta
Copy link
Member

kalta commented Sep 2, 2020

Hi, thank you for your comment.

I am not working on NkSIP recently, but, at first sight, your PR does not seem to work... validate_process/1 would not receive a pid, but [{_, pid()}] right?

@pickme467
Copy link
Author

pickme467 commented Sep 2, 2020 via email

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