2 * This file is open source software, licensed to you under the terms
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
4 * distributed with this work for additional information regarding copyright
5 * ownership. You may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing,
12 * software distributed under the License is distributed on an
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 * KIND, either express or implied. See the License for the
15 * specific language governing permissions and limitations
20 * Copyright (C) 2016 ScyllaDB.
24 #include <seastar/core/preempt.hh>
28 #include <seastar/util/std-compat.hh>
31 /// Clock used for scheduling threads
32 using thread_clock = std::chrono::steady_clock;
36 class scheduling_group;
39 #ifdef SEASTAR_ASAN_ENABLED
41 void* fake_stack = nullptr;
42 const void* stack_bottom;
48 thread_context* thread;
50 void initial_switch_in(ucontext_t* initial_context, const void* stack_bottom, size_t stack_size);
53 void initial_switch_in_completed();
54 void final_switch_out();
57 extern thread_local jmp_buf_link* g_current_context;
59 namespace thread_impl {
61 inline thread_context* get() {
62 return g_current_context->thread;
65 inline bool should_yield() {
73 scheduling_group sched_group(const thread_context*);
76 void switch_in(thread_context* to);
77 void switch_out(thread_context* from);