diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-05-19 08:44:57 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-05-19 08:44:57 +0000 |
commit | 552244724c5a88fb1a9d47750450fbfa3d9badba (patch) | |
tree | 878e4319539620bc12f0bb4675401125ff796ef3 | |
parent | e2ebed86bf2aff904d9b89765771e03bd8e74433 (diff) | |
download | openocd_libswd-552244724c5a88fb1a9d47750450fbfa3d9badba.tar.gz openocd_libswd-552244724c5a88fb1a9d47750450fbfa3d9badba.tar.bz2 openocd_libswd-552244724c5a88fb1a9d47750450fbfa3d9badba.tar.xz openocd_libswd-552244724c5a88fb1a9d47750450fbfa3d9badba.zip |
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
-rw-r--r-- | src/target/target.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/target/target.c b/src/target/target.c index d5e4ea56..7ab7a7c6 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -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; |