Merge branch 'v0.8'

This commit is contained in:
Bert Belder 2012-08-18 03:57:41 +02:00
commit 201b8f935f
7 changed files with 30 additions and 15 deletions

View File

@ -1107,8 +1107,7 @@ UV_EXTERN int uv_async_send(uv_async_t* async);
/* /*
* uv_timer_t is a subclass of uv_handle_t. * uv_timer_t is a subclass of uv_handle_t.
* *
* Wraps libev's ev_timer watcher. Used to get woken up at a specified time * Used to get woken up at a specified time in the future.
* in the future.
*/ */
struct uv_timer_s { struct uv_timer_s {
UV_HANDLE_FIELDS UV_HANDLE_FIELDS
@ -1117,8 +1116,22 @@ struct uv_timer_s {
UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* timer); UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* timer);
UV_EXTERN int uv_timer_start(uv_timer_t* timer, uv_timer_cb cb, /*
int64_t timeout, int64_t repeat); * Start the timer. `timeout` and `repeat` are in milliseconds.
*
* If timeout is zero, the callback fires on the next tick of the event loop.
*
* If repeat is non-zero, the callback fires first after timeout milliseconds
* and then repeatedly after repeat milliseconds.
*
* timeout and repeat are signed integers but that will change in a future
* version of libuv. Don't pass in negative values, you'll get a nasty surprise
* when that change becomes effective.
*/
UV_EXTERN int uv_timer_start(uv_timer_t* timer,
uv_timer_cb cb,
int64_t timeout,
int64_t repeat);
UV_EXTERN int uv_timer_stop(uv_timer_t* timer); UV_EXTERN int uv_timer_stop(uv_timer_t* timer);
@ -1130,10 +1143,10 @@ UV_EXTERN int uv_timer_stop(uv_timer_t* timer);
UV_EXTERN int uv_timer_again(uv_timer_t* timer); UV_EXTERN int uv_timer_again(uv_timer_t* timer);
/* /*
* Set the repeat value. Note that if the repeat value is set from a timer * Set the repeat value in milliseconds. Note that if the repeat value is set
* callback it does not immediately take effect. If the timer was non-repeating * from a timer callback it does not immediately take effect. If the timer was
* before, it will have been stopped. If it was repeating, then the old repeat * non-repeating before, it will have been stopped. If it was repeating, then
* value will have been used to schedule the next timeout. * the old repeat value will have been used to schedule the next timeout.
*/ */
UV_EXTERN void uv_timer_set_repeat(uv_timer_t* timer, int64_t repeat); UV_EXTERN void uv_timer_set_repeat(uv_timer_t* timer, int64_t repeat);

View File

@ -44,7 +44,7 @@ void uv__platform_loop_delete(uv_loop_t* loop) {
uint64_t uv_hrtime() { uint64_t uv_hrtime() {
struct timespec ts; struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * NANOSEC + ts.tv_nsec); return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec);
} }
void uv_loadavg(double avg[3]) { void uv_loadavg(double avg[3]) {

View File

@ -66,7 +66,7 @@ void uv__platform_loop_delete(uv_loop_t* loop) {
uint64_t uv_hrtime(void) { uint64_t uv_hrtime(void) {
struct timespec ts; struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * NANOSEC + ts.tv_nsec); return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec);
} }

View File

@ -87,7 +87,7 @@ void uv__platform_loop_delete(uv_loop_t* loop) {
uint64_t uv_hrtime() { uint64_t uv_hrtime() {
struct timespec ts; struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * NANOSEC + ts.tv_nsec); return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec);
} }

View File

@ -47,7 +47,7 @@ void uv__platform_loop_delete(uv_loop_t* loop) {
uint64_t uv_hrtime(void) { uint64_t uv_hrtime(void) {
struct timespec ts; struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * NANOSEC + ts.tv_nsec); return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec);
} }
void uv_loadavg(double avg[3]) { void uv_loadavg(double avg[3]) {

View File

@ -55,7 +55,7 @@ void uv__platform_loop_delete(uv_loop_t* loop) {
uint64_t uv_hrtime(void) { uint64_t uv_hrtime(void) {
struct timespec ts; struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * NANOSEC + ts.tv_nsec); return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec);
} }

View File

@ -354,8 +354,10 @@ uv_err_t uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
cpu_info->model = NULL; cpu_info->model = NULL;
} else { } else {
knp = (kstat_named_t *) kstat_data_lookup(ksp, (char *)"clock_MHz"); knp = (kstat_named_t *) kstat_data_lookup(ksp, (char *)"clock_MHz");
assert(knp->data_type == KSTAT_DATA_INT32); assert(knp->data_type == KSTAT_DATA_INT32 ||
cpu_info->speed = knp->value.i32; knp->data_type == KSTAT_DATA_INT64);
cpu_info->speed = (knp->data_type == KSTAT_DATA_INT32) ? knp->value.i32
: knp->value.i64;
knp = (kstat_named_t *) kstat_data_lookup(ksp, (char *)"brand"); knp = (kstat_named_t *) kstat_data_lookup(ksp, (char *)"brand");
assert(knp->data_type == KSTAT_DATA_STRING); assert(knp->data_type == KSTAT_DATA_STRING);