~ubuntu-branches/ubuntu/saucy/nodejs/saucy

« back to all changes in this revision

Viewing changes to deps/uv/src/unix/loop-watcher.c

  • Committer: Package Import Robot
  • Author(s): Jérémy Lal
  • Date: 2013-08-14 00:16:46 UTC
  • mfrom: (7.1.40 sid)
  • Revision ID: package-import@ubuntu.com-20130814001646-bzlysfh8sd6mukbo
Tags: 0.10.15~dfsg1-4
* Update 2005 patch, adding a handful of tests that can fail on
  slow platforms.
* Add 1004 patch to fix test failures when writing NaN to buffer
  on mipsel.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
 
2
 *
 
3
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 
4
 * of this software and associated documentation files (the "Software"), to
 
5
 * deal in the Software without restriction, including without limitation the
 
6
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 
7
 * sell copies of the Software, and to permit persons to whom the Software is
 
8
 * furnished to do so, subject to the following conditions:
 
9
 *
 
10
 * The above copyright notice and this permission notice shall be included in
 
11
 * all copies or substantial portions of the Software.
 
12
 *
 
13
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
14
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
15
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
16
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
17
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
18
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 
19
 * IN THE SOFTWARE.
 
20
 */
 
21
 
 
22
#include "uv.h"
 
23
#include "internal.h"
 
24
 
 
25
#define UV_LOOP_WATCHER_DEFINE(name, type)                                    \
 
26
  int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) {              \
 
27
    uv__handle_init(loop, (uv_handle_t*)handle, UV_##type);                   \
 
28
    handle->name##_cb = NULL;                                                 \
 
29
    return 0;                                                                 \
 
30
  }                                                                           \
 
31
                                                                              \
 
32
  int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) {           \
 
33
    if (uv__is_active(handle)) return 0;                                      \
 
34
    if (cb == NULL)                                                           \
 
35
      return uv__set_artificial_error(handle->loop, UV_EINVAL);               \
 
36
    ngx_queue_insert_head(&handle->loop->name##_handles, &handle->queue);     \
 
37
    handle->name##_cb = cb;                                                   \
 
38
    uv__handle_start(handle);                                                 \
 
39
    return 0;                                                                 \
 
40
  }                                                                           \
 
41
                                                                              \
 
42
  int uv_##name##_stop(uv_##name##_t* handle) {                               \
 
43
    if (!uv__is_active(handle)) return 0;                                     \
 
44
    ngx_queue_remove(&handle->queue);                                         \
 
45
    uv__handle_stop(handle);                                                  \
 
46
    return 0;                                                                 \
 
47
  }                                                                           \
 
48
                                                                              \
 
49
  void uv__run_##name(uv_loop_t* loop) {                                      \
 
50
    uv_##name##_t* h;                                                         \
 
51
    ngx_queue_t* q;                                                           \
 
52
    ngx_queue_foreach(q, &loop->name##_handles) {                             \
 
53
      h = ngx_queue_data(q, uv_##name##_t, queue);                            \
 
54
      h->name##_cb(h, 0);                                                     \
 
55
    }                                                                         \
 
56
  }                                                                           \
 
57
                                                                              \
 
58
  void uv__##name##_close(uv_##name##_t* handle) {                            \
 
59
    uv_##name##_stop(handle);                                                 \
 
60
  }
 
61
 
 
62
UV_LOOP_WATCHER_DEFINE(prepare, PREPARE)
 
63
UV_LOOP_WATCHER_DEFINE(check, CHECK)
 
64
UV_LOOP_WATCHER_DEFINE(idle, IDLE)