GNUnet  0.10.x
gnunet_scheduler_lib.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet
3  Copyright (C) 2009-2016 GNUnet e.V.
4 
5  GNUnet is free software: you can redistribute it and/or modify it
6  under the terms of the GNU Affero General Public License as published
7  by the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  GNUnet is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Affero General Public License for more details.
14 
15  You should have received a copy of the GNU Affero General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
35 #ifndef GNUNET_SCHEDULER_LIB_H
36 #define GNUNET_SCHEDULER_LIB_H
37 
38 #ifdef __cplusplus
39 extern "C"
40 {
41 #if 0 /* keep Emacsens' auto-indent happy */
42 }
43 #endif
44 #endif
45 
50 
60 
65 
70 
76 
81 
86 
91 };
92 
93 
94 #include "gnunet_time_lib.h"
95 #include "gnunet_network_lib.h"
96 
97 
107 
112 
117 
122 
127 
132 
137 };
138 
139 
149  const struct GNUNET_NETWORK_Handle *fd;
150 
156  const struct GNUNET_DISK_FileHandle *fh;
157 
162 
166  int sock;
167 };
168 
169 
178 
182  unsigned int fds_len;
183 
191 
198 
205 };
206 
207 
208 
209 
221 void
223  struct GNUNET_SCHEDULER_FdInfo *fdi);
224 
225 
230 
231 
252 int
254 
255 
264  void *cls;
265 
279  int
280  (*add)(void *cls,
281  struct GNUNET_SCHEDULER_Task *task,
282  struct GNUNET_SCHEDULER_FdInfo *fdi);
283 
294  int
295  (*del)(void *cls,
296  struct GNUNET_SCHEDULER_Task *task);
297 
304  void
305  (*set_wakeup)(void *cls,
306  struct GNUNET_TIME_Absolute dt);
307 };
308 
309 
315 typedef void
317 
318 
352 
353 
368 void
370 
371 
379 
380 
392 typedef int
394  struct GNUNET_NETWORK_FDSet *rfds,
395  struct GNUNET_NETWORK_FDSet *wfds,
396  struct GNUNET_NETWORK_FDSet *efds,
398 
399 
414 void
416  void *task_cls);
417 
429 void
432  void *task_cls);
433 
434 
441 void
443 
444 
456 unsigned int
458 
459 
466 const struct GNUNET_SCHEDULER_TaskContext *
468 
469 
482 void *
484 
485 
496 void
498  void *task_cls,
500  enum GNUNET_SCHEDULER_Priority priority);
501 
502 
512 struct GNUNET_SCHEDULER_Task *
515  void *task_cls);
516 
517 
533 struct GNUNET_SCHEDULER_Task *
535  void *task_cls);
536 
537 
548 struct GNUNET_SCHEDULER_Task *
550  void *task_cls);
551 
552 
567 struct GNUNET_SCHEDULER_Task *
570  void *task_cls);
571 
572 
584 struct GNUNET_SCHEDULER_Task *
587  void *task_cls);
588 
589 
601 struct GNUNET_SCHEDULER_Task *
604  void *task_cls);
605 
606 
618 struct GNUNET_SCHEDULER_Task *
622  void *task_cls);
623 
624 
636 struct GNUNET_SCHEDULER_Task *
640  void *task_cls);
641 
642 
663 struct GNUNET_SCHEDULER_Task *
665  struct GNUNET_NETWORK_Handle *rfd,
667  void *task_cls);
668 
669 
692 struct GNUNET_SCHEDULER_Task *
695  struct GNUNET_NETWORK_Handle *rfd,
697  void *task_cls);
698 
699 
721 struct GNUNET_SCHEDULER_Task *
723  struct GNUNET_NETWORK_Handle *wfd,
725  void *task_cls);
726 
727 
751 struct GNUNET_SCHEDULER_Task *
754  struct GNUNET_NETWORK_Handle *fd,
755  int on_read,
756  int on_write,
758  void *task_cls);
759 
760 
781 struct GNUNET_SCHEDULER_Task *
783  const struct GNUNET_DISK_FileHandle *rfd,
785  void *task_cls);
786 
787 
808 struct GNUNET_SCHEDULER_Task *
810  const struct GNUNET_DISK_FileHandle *wfd,
812  void *task_cls);
813 
814 
838 struct GNUNET_SCHEDULER_Task *
841  const struct GNUNET_DISK_FileHandle *fd,
842  int on_read, int on_write,
844  void *task_cls);
845 
846 
878 struct GNUNET_SCHEDULER_Task *
881  const struct GNUNET_NETWORK_FDSet *rs,
882  const struct GNUNET_NETWORK_FDSet *ws,
884  void *task_cls);
885 
892 void
894  void *new_select_cls);
895 
896 
897 
910 void
912 
913 
914 
915 #if 0 /* keep Emacsens' auto-indent happy */
916 {
917 #endif
918 #ifdef __cplusplus
919 }
920 #endif
921 
922 #endif
923  /* end of group scheduler */
const struct GNUNET_SCHEDULER_TaskContext * GNUNET_SCHEDULER_get_task_context(void)
Obtain the reasoning why the current task was started.
Definition: scheduler.c:737
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_at_with_priority(struct GNUNET_TIME_Absolute at, enum GNUNET_SCHEDULER_Priority priority, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run at the specified time.
Definition: scheduler.c:1091
Information about an event relating to a file descriptor/socket.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed_with_priority(struct GNUNET_TIME_Relative delay, enum GNUNET_SCHEDULER_Priority priority, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1169
The reading socket is ready.
Context information passed to each scheduler task.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_shutdown(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run on shutdown, that is when a CTRL-C signal is received, or when GNUNET_SCHEDULER_shutdown() is being invoked.
Definition: scheduler.c:1284
The prerequisite task is done.
struct GNUNET_SCHEDULER_Handle * GNUNET_SCHEDULER_driver_init(const struct GNUNET_SCHEDULER_Driver *driver)
Function called by external event loop implementations to initialize the scheduler.
Definition: scheduler.c:2150
const struct GNUNET_NETWORK_FDSet * write_ready
Set of file descriptors ready for writing; note that additional bits may be set that were not in the ...
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_write_net(struct GNUNET_TIME_Relative delay, struct GNUNET_NETWORK_Handle *wfd, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when the specified file descriptor is ready f...
Definition: scheduler.c:1537
void GNUNET_SCHEDULER_run(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Initialize and run scheduler.
Definition: scheduler.c:707
API an external event loop has to implement for GNUNET_SCHEDULER_driver_init.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_write_file(struct GNUNET_TIME_Relative delay, const struct GNUNET_DISK_FileHandle *wfd, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when the specified file descriptor is ready f...
Definition: scheduler.c:1647
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_read_file(struct GNUNET_TIME_Relative delay, const struct GNUNET_DISK_FileHandle *rfd, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when the specified file descriptor is ready f...
Definition: scheduler.c:1615
const struct GNUNET_NETWORK_FDSet * read_ready
Set of file descriptors ready for reading; note that additional bits may be set that were not in the ...
Identifier for an asynchronous execution context.
GNUNET_SCHEDULER_Priority
Valid task priorities.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_file_with_priority(struct GNUNET_TIME_Relative delay, enum GNUNET_SCHEDULER_Priority priority, const struct GNUNET_DISK_FileHandle *fd, int on_read, int on_write, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when the specified file descriptor is ready...
Definition: scheduler.c:1682
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:517
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_read_net_with_priority(struct GNUNET_TIME_Relative delay, enum GNUNET_SCHEDULER_Priority priority, struct GNUNET_NETWORK_Handle *rfd, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified priority and to be run after the specified delay or wh...
Definition: scheduler.c:1501
enum GNUNET_SCHEDULER_Reason reason
Reason why the task is run now.
void(* GNUNET_SCHEDULER_TaskCallback)(void *cls)
Signature of the main function of a task.
struct GNUNET_SCHEDULER_Driver * GNUNET_SCHEDULER_driver_select(void)
Obtain the driver for using select() as the event loop.
Definition: scheduler.c:2470
We are shutting down and are running all shutdown-related tasks.
void GNUNET_SCHEDULER_add_with_reason_and_priority(GNUNET_SCHEDULER_TaskCallback task, void *task_cls, enum GNUNET_SCHEDULER_Reason reason, enum GNUNET_SCHEDULER_Priority priority)
Continue the current execution with the given function.
Definition: scheduler.c:1050
const struct GNUNET_SCHEDULER_FdInfo * fds
Array of length fds_len with information about ready FDs.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now_with_lifeness(int lifeness, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible with the (transitive) ignore-shutdown flag either e...
Definition: scheduler.c:1331
GNUNET_SCHEDULER_Reason
Reasons why the schedule may have triggered the task now.
unsigned int fds_len
Length of the following array.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_delayed(struct GNUNET_TIME_Relative delay, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay.
Definition: scheduler.c:1237
void GNUNET_SCHEDULER_set_select(GNUNET_SCHEDULER_select new_select, void *new_select_cls)
Sets the select function to use in the scheduler (scheduler_select).
Definition: scheduler.c:426
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_with_priority(enum GNUNET_SCHEDULER_Priority prio, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified priority.
Definition: scheduler.c:1191
static struct GNUNET_TIME_Relative timeout
User defined timestamp for completing operations.
Definition: gnunet-arm.c:114
static struct GNUNET_OS_Process * p
Helper process we started.
Definition: gnunet-qr.c:59
static int del
Desired action is to remove a record.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_now(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run as soon as possible.
Definition: scheduler.c:1264
int sock
Underlying OS handle the event was about.
static struct SolverHandle * sh
collection of IO descriptors
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_select(enum GNUNET_SCHEDULER_Priority prio, struct GNUNET_TIME_Relative delay, const struct GNUNET_NETWORK_FDSet *rs, const struct GNUNET_NETWORK_FDSet *ws, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when any of the specified file descriptor set...
Definition: scheduler.c:1784
const struct GNUNET_DISK_FileHandle * fh
GNUnet file handle the event is about, matches sock, NULL if this is about a network socket or if no ...
const struct GNUNET_NETWORK_Handle * fd
GNUnet network socket the event is about, matches sock, NULL if this is about a file handle or if no ...
Buffer available for writing.
void GNUNET_SCHEDULER_run_with_optional_signals(int install_signals, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Initialize and run scheduler.
The writing socket is ready.
Data available for reading.
The specified timeout has expired.
static struct GNUNET_TIME_Relative delay
When should dkg communication start?
static int add
Desired action is to add a record.
int GNUNET_SCHEDULER_do_work(struct GNUNET_SCHEDULER_Handle *sh)
Function called by external event loop implementations to tell the scheduler to run some of the tasks...
Definition: scheduler.c:1947
enum GNUNET_SCHEDULER_EventType et
Type of the event that was generated related to sock.
No event (useful for timeout).
This task is not ready.
int(* GNUNET_SCHEDULER_select)(void *cls, struct GNUNET_NETWORK_FDSet *rfds, struct GNUNET_NETWORK_FDSet *wfds, struct GNUNET_NETWORK_FDSet *efds, struct GNUNET_TIME_Relative timeout)
Signature of the select function used by the scheduler.
void GNUNET_SCHEDULER_begin_async_scope(struct GNUNET_AsyncScopeId *aid)
Change the async scope for the currently executing task and (transitively) for all tasks scheduled by...
Definition: scheduler.c:2497
This is the very first task run during startup.
void * cls
Closure to pass to the functions in this struct.
Entry in list of pending tasks.
Definition: scheduler.c:131
handle to a socket
Definition: network.c:46
void GNUNET_SCHEDULER_driver_done(struct GNUNET_SCHEDULER_Handle *sh)
Counter-part of GNUNET_SCHEDULER_driver_init.
Definition: scheduler.c:2225
Time for absolute times used by GNUnet, in microseconds.
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_read_net(struct GNUNET_TIME_Relative delay, struct GNUNET_NETWORK_Handle *rfd, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when the specified file descriptor is ready f...
Definition: scheduler.c:1467
enum GNUNET_SCHEDULER_Priority priority
Task priority.
Definition: scheduler.c:199
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_net_with_priority(struct GNUNET_TIME_Relative delay, enum GNUNET_SCHEDULER_Priority priority, struct GNUNET_NETWORK_Handle *fd, int on_read, int on_write, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run with a specified delay or when the specified file descriptor is ready...
Definition: scheduler.c:1573
void GNUNET_SCHEDULER_task_ready(struct GNUNET_SCHEDULER_Task *task, struct GNUNET_SCHEDULER_FdInfo *fdi)
Function used by event-loop implementations to signal the scheduler that a particular task is ready d...
Definition: scheduler.c:1902
struct GNUNET_SCHEDULER_Task * GNUNET_SCHEDULER_add_at(struct GNUNET_TIME_Absolute at, GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Schedule a new task to be run at the specified time.
Definition: scheduler.c:1214
Handle used to access files (and pipes).
Argument to be passed from the driver to GNUNET_SCHEDULER_do_work().
Definition: scheduler.c:79
unsigned int GNUNET_SCHEDULER_get_load(enum GNUNET_SCHEDULER_Priority p)
Get information about the current load of this scheduler.
Definition: scheduler.c:754
Time for relative time used by GNUnet, in microseconds.
int lifeness
Should the existence of this task in the queue be counted as reason to not shutdown the scheduler...
Definition: scheduler.c:215
GNUNET_SCHEDULER_EventType
Possible events on FDs, used as a bitmask.
void * GNUNET_SCHEDULER_cancel(struct GNUNET_SCHEDULER_Task *task)
Cancel the task with the specified identifier.
Definition: scheduler.c:956