Chris Albertson wrote:
> Your log file almost looks like a bug in Asterisk doesn't it?
> Why call poll() with a zero timeout while passing only one FD?
> and then why do the read when there is no data?
>
> Read the man pages for all the system calls
>
> Take a look at the source chan_sip.c
>
> /* Wait for sched or io */
> res = ast_sched_wait(sched);
> if ((res < 0) || (res > 1000))
> res = 1000;
> res = ast_io_wait(io, res);
> ast_pthread_mutex_lock(&monlock);
> if (res >= 0)
> ast_sched_runq(sched);
> ast_pthread_mutex_unlock(&monlock);
>
>
> OK so it looks like ast_sched_wait(sched) is returning
> zeroes Take a look....
>
> {
> /*
> * Return the number of milliseconds
> * until the next scheduled event
> */
> struct timeval tv;
> int ms;
> DEBUG(ast_log(LOG_DEBUG, "ast_sched_wait()\n"));
> if (!con->schedq)
> return -1;
> if (gettimeofday(&tv, NULL) < 0) {
> /* This should never happen */
> return 0;
> };
> ms = (con->schedq->when.tv_sec - tv.tv_sec) * 1000;
> ms += (con->schedq->when.tv_usec - tv.tv_usec) / 1000;
> if (ms < 0)
> ms = 0;
> return ms;
>
> gettimeofday might be failing!! Why?
> I'd add a call to perror() after "his should never happen"
> I'll bet it has to do with time zones
>
> But then maybe ms is beingset to zero...
Aha. It may be connected to this error message, then:
messages:Oct 26 21:18:15 NOTICE[137382912]: File sched.c, Line 209
(sched_settime): Request to schedule in the past?!?!
I read somewhere that I could ignore this message, therefore I just didn't
include it in my earlier
report. Seems like I can't ignore it any more :-(
However, I'm not a fluent C programmer, so I don't now where to fix
this. I just wish there
are others on the list that works with FreeBSD and are programmers... Hello, out
there!
List: Sorry for filling this list with dev- related information, it started as a
general
problem and slided into development, such things happens.
/Olle
>
>
> Good luck
>
>
> --- "Olle E. Johansson" <oej@edvina.net> wrote:
>
>>From: "Olle E. Johansson" <oej@edvina.net>
>>To: asterisk-users@lists.digium.com
>>Subject: Re: [Asterisk-Users] Asterisk on FreeBSD
>>Date: Mon, 27 Oct 2003 21:25:04 +0100
>>
>>Perry E. Metzger wrote:
>>
>>
>>>"Olle E. Johansson" <oej@edvina.net> writes:
>>>
>>>
>>>>My Asterisk (fresh CVS) takes 98% of the system load on my
FreeBSD
>>>>server. On a slower CPU linux system, Asterisk runs at 0.1% -
both
>>>>without any active channels...
>>>>
>>>>Any ideas, anyone recognizing the problem?
>>>
>>>
>>>On the BSDs, your friend is ktrace (or ktruss, depending on
>>>flavor). It will tell you what system calls your process is
>>
>>executing
>>
>>>while it is doing this.
>>
>>ktrace on FreeBSD generates a file filled with this:
>>And some signals caught here and there.
>>Doesn't make me wiser.
>>
>>/Olle
>>---------------------------------------------------------------
>>74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>> ""
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>>
>>----------
>>And sometimes this - repeated many times:
>>
>> ""
>> 74987 asterisk PSIG SIGPROF caught handler=0x28180260 mask=0x0
>>code=0x0
>> 74987 asterisk RET read 0
>> 74987 asterisk CALL gettimeofday(0x281c8e88,0)
>> 74987 asterisk RET gettimeofday 0
>> 74987 asterisk CALL sigprocmask(0x3,0x281c8ef8,0)
>> 74987 asterisk RET sigprocmask 0
>> 74987 asterisk CALL poll(0x80cf000,0x4,0)
>> 74987 asterisk RET poll 0
>> 74987 asterisk CALL sigreturn(0xbfa87cec)
>> 74987 asterisk RET sigreturn JUSTRETURN
>> 74987 asterisk CALL poll(0x851e400,0x1,0)
>> 74987 asterisk RET poll 1
>> 74987 asterisk CALL read(0x15,0x2845e060,0x100)
>> 74987 asterisk GIO fd 21 read 0 bytes
>>
>