[asterisk-bugs] [JIRA] (ASTERISK-29698) Segfault if sorcery object_lifetime_maximum and qualify_frequency the same value

Joshua C. Colp (JIRA) noreply at issues.asterisk.org
Tue Nov 9 14:09:49 CST 2021


    [ https://issues.asterisk.org/jira/browse/ASTERISK-29698?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=256826#comment-256826 ] 

Joshua C. Colp edited comment on ASTERISK-29698 at 11/9/21 2:08 PM:
--------------------------------------------------------------------

Can you elaborate on what you think above? In schedule_cache_expiration the reference to cache is only unreferenced if it is successfully deleted from the scheduler. If the scheduled item is running then the unref in AST_SCHED_DEL_UNREF is never executed, and instead the unref is done in expire_objects_from_cache. It's one or the other - not both - so there would be no double unreference.

This reference is incremented in the first place when the scheduled item for expire_objects_from_cache is added.


was (Author: jcolp):
Can you elaborate on what you think above? In schedule_cache_expiration the reference to cache is only unreferenced if it is successfully deleted from the scheduler. If the scheduled item is running then the unref in AST_SCHED_DEL_UNREF is never executed, and instead the unref is done in expire_objects_from_cache. It's one or the other - not both - so there would be no double unreference.

> Segfault if sorcery object_lifetime_maximum and qualify_frequency the same value
> --------------------------------------------------------------------------------
>
>                 Key: ASTERISK-29698
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-29698
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Resources/res_pjsip, Resources/res_sorcery_memory_cache
>    Affects Versions: 16.21.1
>            Reporter: Alexei Gradinari
>            Assignee: Unassigned
>         Attachments: bt2.txt, bt.txt, core-brief.txt, core-full.txt, core-locks.txt, core-thread1.txt
>
>
> sorcery.conf:
> [res_pjsip]
> endpoint=realtime,ps_endpoints
> endpoint/cache=memory_cache,maximum_objects=3000,expire_on_reload=yes,object_lifetime_maximum=30
> aor=realtime,ps_aors
> aor/cache=memory_cache,maximum_objects=3000,expire_on_reload=yes,object_lifetime_maximum=30
> The endpoint with aor's static contact and qualify_frequency = 30
> I think one thread 'sorcery_memory_cache' clears cache due to expiry
> and another thread 'pjsip_options' uses the same cache object which is already freed.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list