Hi,
I have a big problem with fast lock mutex on arm CPU:
sometimes I find one or more children that go in an infinite loop, in the while 
loop of get_lock function.
They remain in Run for long time (sometimes hours) and openser keeps 100% CPU.

Now I have changed the functions get_lock and tsl in order to obtain more info 
and
I observe that  (if and) when the process finish the cycle, it have done a big 
amount of cycles.

This the log with my added info:
Mar 26 20:29:08 SAM-IP openser[1645]: NOTICE:tm:_lock: ret 1 (cycle)
Mar 26 20:29:51 SAM-IP openser[1645]: NOTICE:tm:_lock: ret 1 (cycle)
Mar 26 20:29:55 SAM-IP openser[1645]: NOTICE:tm:_lock: ret 1 (cycle)

Mar 26 20:29:55 SAM-IP openser[1645]: NOTICE:tm:t_retransmit_reply: MYTM lock
[process in loop]
Mar 26 20:33:46 SAM-IP openser[1645]: NOTICE:tm:_lock: ret 59374917 (cycle)
[after 4 minutes and 59374917 cycles, this is an example with a "short" loop]
Mar 26 20:33:46 SAM-IP openser[1645]: NOTICE:tm:t_retransmit_reply: MYTM lock 
done

I'm not able to recognize the call flow that generates the loop (I know only 
that it always happens when t_retransmit_reply calls LOCK_REPLIES),
but I urgently need a work around to escape from the loop.

This is the get_lock function with my counter j:

inline static int get_lock(fl_lock_t* lock)
{
#ifdef ADAPTIVE_WAIT
        int i=ADAPTIVE_WAIT_LOOPS;
        int j=1;                                        /***** my change ****/
#endif

        while(tsl(lock)){
#ifdef BUSY_WAIT
#elif defined ADAPTIVE_WAIT
                j++;                            /***** my change ****/
                if (i>0) i--;
                else sched_yield();
#else
                sched_yield();
#endif
        }
        return(j);
}

Can I break the lock when my counter reaches a big value?
Should I call the unlock function after the break?
which value can be considered too big?

Thanks,
Daniele




**********************************************************************
The information in this message is confidential and may be legally
privileged. It is intended solely for the addressee. Access to this 
message
by anyone else is unauthorized. If you are not the intended 
recipient, any
disclosure, copying, or distribution of the message, or any action 
or
omission taken by you in reliance on it, is prohibited and may be 
unlawful.
Please immediately contact the sender if you have received this 
message in error.


**********************************************************************
_______________________________________________
Kamailio (OpenSER) - Users mailing list
Users@lists.kamailio.org
http://lists.kamailio.org/cgi-bin/mailman/listinfo/users
http://lists.openser-project.org/cgi-bin/mailman/listinfo/users

Reply via email to