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 
56 {
61 
66 
71 
77 
82 
87 
92 };
93 
94 
95 #include "gnunet_time_lib.h"
96 #include "gnunet_network_lib.h"
97 
98 
104 {
105 
110 
115 
120 
125 
130 
135 
140 
141 };
142 
143 
148 {
149 
155  const struct GNUNET_NETWORK_Handle *fd;
156 
162  const struct GNUNET_DISK_FileHandle *fh;
163 
168 
172  int sock;
173 
174 };
175 
176 
181 {
186 
190  unsigned int fds_len;
191 
199 
206 
213 
214 };
215 
216 
217 
218 
230 void
232  struct GNUNET_SCHEDULER_FdInfo *fdi);
233 
234 
239 
240 
261 int
263 
264 
270 {
271 
275  void *cls;
276 
290  int
291  (*add)(void *cls,
292  struct GNUNET_SCHEDULER_Task *task,
293  struct GNUNET_SCHEDULER_FdInfo *fdi);
294 
305  int
306  (*del)(void *cls,
307  struct GNUNET_SCHEDULER_Task *task);
308 
315  void
316  (*set_wakeup)(void *cls,
317  struct GNUNET_TIME_Absolute dt);
318 
319 };
320 
321 
327 typedef void
329 
330 
364 
365 
380 void
382 
383 
391 
392 
404 typedef int
406  struct GNUNET_NETWORK_FDSet *rfds,
407  struct GNUNET_NETWORK_FDSet *wfds,
408  struct GNUNET_NETWORK_FDSet *efds,
410 
411 
426 void
428  void *task_cls);
429 
441 void
442 GNUNET_SCHEDULER_run_with_optional_signals (int install_signals,
444  void *task_cls);
445 
446 
453 void
455 
456 
468 unsigned int
470 
471 
478 const struct GNUNET_SCHEDULER_TaskContext *
480 
481 
494 void *
496 
497 
508 void
510  void *task_cls,
512  enum GNUNET_SCHEDULER_Priority priority);
513 
514 
524 struct GNUNET_SCHEDULER_Task *
527  void *task_cls);
528 
529 
545 struct GNUNET_SCHEDULER_Task *
547  void *task_cls);
548 
549 
560 struct GNUNET_SCHEDULER_Task *
562  void *task_cls);
563 
564 
579 struct GNUNET_SCHEDULER_Task *
582  void *task_cls);
583 
584 
596 struct GNUNET_SCHEDULER_Task *
599  void *task_cls);
600 
601 
613 struct GNUNET_SCHEDULER_Task *
616  void *task_cls);
617 
618 
630 struct GNUNET_SCHEDULER_Task *
634  void *task_cls);
635 
636 
648 struct GNUNET_SCHEDULER_Task *
652  void *task_cls);
653 
654 
675 struct GNUNET_SCHEDULER_Task *
677  struct GNUNET_NETWORK_Handle *rfd,
679  void *task_cls);
680 
681 
704 struct GNUNET_SCHEDULER_Task *
707  struct GNUNET_NETWORK_Handle *rfd,
709  void *task_cls);
710 
711 
733 struct GNUNET_SCHEDULER_Task *
735  struct GNUNET_NETWORK_Handle *wfd,
737  void *task_cls);
738 
739 
763 struct GNUNET_SCHEDULER_Task *
766  struct GNUNET_NETWORK_Handle *fd,
767  int on_read,
768  int on_write,
770  void *task_cls);
771 
772 
793 struct GNUNET_SCHEDULER_Task *
795  const struct GNUNET_DISK_FileHandle *rfd,
797  void *task_cls);
798 
799 
820 struct GNUNET_SCHEDULER_Task *
822  const struct GNUNET_DISK_FileHandle *wfd,
824  void *task_cls);
825 
826 
850 struct GNUNET_SCHEDULER_Task *
853  const struct GNUNET_DISK_FileHandle *fd,
854  int on_read, int on_write,
856  void *task_cls);
857 
858 
890 struct GNUNET_SCHEDULER_Task *
893  const struct GNUNET_NETWORK_FDSet *rs,
894  const struct GNUNET_NETWORK_FDSet *ws,
896  void *task_cls);
897 
904 void
906  void *new_select_cls);
907 
908 
909 
922 void
924 
925 
926 
927 #if 0 /* keep Emacsens' auto-indent happy */
928 {
929 #endif
930 #ifdef __cplusplus
931 }
932 #endif
933 
934 #endif
935  /* 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:746
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:1100
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:1178
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:1293
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:2195
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:1548
void GNUNET_SCHEDULER_run(GNUNET_SCHEDULER_TaskCallback task, void *task_cls)
Initialize and run scheduler.
Definition: scheduler.c:716
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:1675
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:1643
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:1710
void GNUNET_SCHEDULER_shutdown(void)
Request the shutdown of a scheduler.
Definition: scheduler.c:524
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:1512
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:2520
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:1059
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:1340
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:1246
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:433
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:1200
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:1273
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:1829
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:1992
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:2546
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:134
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:2272
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:1478
enum GNUNET_SCHEDULER_Priority priority
Task priority.
Definition: scheduler.c:203
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:1584
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:1947
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:1223
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:763
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:219
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:965