GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: threadpoolwork-inl.h Lines: 21 21 100.0 %
Date: 2022-11-09 04:21:35 Branches: 17 18 94.4 %

Line Branch Exec Source
1
// Copyright Joyent, Inc. and other Node contributors.
2
//
3
// Permission is hereby granted, free of charge, to any person obtaining a
4
// copy of this software and associated documentation files (the
5
// "Software"), to deal in the Software without restriction, including
6
// without limitation the rights to use, copy, modify, merge, publish,
7
// distribute, sublicense, and/or sell copies of the Software, and to permit
8
// persons to whom the Software is furnished to do so, subject to the
9
// following conditions:
10
//
11
// The above copyright notice and this permission notice shall be included
12
// in all copies or substantial portions of the Software.
13
//
14
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20
// USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22
#ifndef SRC_THREADPOOLWORK_INL_H_
23
#define SRC_THREADPOOLWORK_INL_H_
24
25
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
26
27
#include "node_internals.h"
28
#include "tracing/trace_event.h"
29
#include "util-inl.h"
30
31
namespace node {
32
33
16440
void ThreadPoolWork::ScheduleWork() {
34
16440
  env_->IncreaseWaitingRequestCounter();
35

16534
  TRACE_EVENT_NESTABLE_ASYNC_BEGIN0(
36
      TRACING_CATEGORY_NODE2(threadpoolwork, async), type_, this);
37
32880
  int status = uv_queue_work(
38
16440
      env_->event_loop(),
39
      &work_req_,
40
16439
      [](uv_work_t* req) {
41
16439
        ThreadPoolWork* self = ContainerOf(&ThreadPoolWork::work_req_, req);
42

16533
        TRACE_EVENT_BEGIN0(TRACING_CATEGORY_NODE2(threadpoolwork, sync),
43
                           self->type_);
44
16439
        self->DoThreadPoolWork();
45

16534
        TRACE_EVENT_END0(TRACING_CATEGORY_NODE2(threadpoolwork, sync),
46
                         self->type_);
47
16439
      },
48
16439
      [](uv_work_t* req, int status) {
49
16439
        ThreadPoolWork* self = ContainerOf(&ThreadPoolWork::work_req_, req);
50
16439
        self->env_->DecreaseWaitingRequestCounter();
51

16532
        TRACE_EVENT_NESTABLE_ASYNC_END1(
52
            TRACING_CATEGORY_NODE2(threadpoolwork, async),
53
            self->type_,
54
            self,
55
            "result",
56
            status);
57
16439
        self->AfterThreadPoolWork(status);
58
32878
      });
59
16440
  CHECK_EQ(status, 0);
60
16440
}
61
62
1
int ThreadPoolWork::CancelWork() {
63
1
  return uv_cancel(reinterpret_cast<uv_req_t*>(&work_req_));
64
}
65
66
}  // namespace node
67
68
#endif  // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
69
70
#endif  // SRC_THREADPOOLWORK_INL_H_