Commit 55224472 authored by oharboe's avatar oharboe
Browse files

Michael Fischer found and Edgar Grimberg fixed generic crash in timers...

Michael Fischer found and Edgar Grimberg fixed generic crash in timers reproduceable with at91fr40008

git-svn-id: svn://svn.berlios.de/openocd/trunk@663 b42882b7-edfa-0310-969c-e2dbd0fdcd60
parent e2ebed86
......@@ -748,21 +748,24 @@ static int target_call_timer_callbacks_check_time(int checktime)
(((now.tv_sec >= callback->when.tv_sec) && (now.tv_usec >= callback->when.tv_usec))
|| (now.tv_sec > callback->when.tv_sec)))
{
callback->callback(callback->priv);
if (callback->periodic)
if(callback->callback != NULL)
{
int time_ms = callback->time_ms;
callback->when.tv_usec = now.tv_usec + (time_ms % 1000) * 1000;
time_ms -= (time_ms % 1000);
callback->when.tv_sec = now.tv_sec + time_ms / 1000;
if (callback->when.tv_usec > 1000000)
callback->callback(callback->priv);
if (callback->periodic)
{
callback->when.tv_usec = callback->when.tv_usec - 1000000;
callback->when.tv_sec += 1;
int time_ms = callback->time_ms;
callback->when.tv_usec = now.tv_usec + (time_ms % 1000) * 1000;
time_ms -= (time_ms % 1000);
callback->when.tv_sec = now.tv_sec + time_ms / 1000;
if (callback->when.tv_usec > 1000000)
{
callback->when.tv_usec = callback->when.tv_usec - 1000000;
callback->when.tv_sec += 1;
}
}
else
target_unregister_timer_callback(callback->callback, callback->priv);
}
else
target_unregister_timer_callback(callback->callback, callback->priv);
}
callback = next_callback;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment