1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
2 /*
3  * Copyright (c) 2010      Cisco Systems, Inc.  All rights reserved.
4  * Copyright (c) 2010      Oracle and/or its affiliates.  All rights reserved.
5  * Copyright (c) 2012-2013 Los Alamos National Security, LLC.
6  *                         All rights reserved
7  * Copyright (c) 2015      Intel, Inc. All rights reserved.
8  * Copyright (c) 2017      Research Organization for Information Science
9  *                         and Technology (RIST). All rights reserved.
10  * Copyright (c) 2017      IBM Corporation. All rights reserved.
11  * $COPYRIGHT$
12  *
13  * Additional copyrights may follow
14  */
15 #include "opal_config.h"
16 #include "opal/constants.h"
17 
18 /* protect common defines */
19 #undef PACKAGE_BUGREPORT
20 #undef PACKAGE_NAME
21 #undef PACKAGE_STRING
22 #undef PACKAGE_TARNAME
23 #undef PACKAGE_VERSION
24 
25 #include "libevent/config.h"
26 
27 
28 #ifdef HAVE_SYS_TYPES_H
29 #include <sys/types.h>
30 #endif
31 
32 
33 #ifdef WIN32
34 #define WIN32_LEAN_AND_MEAN
35 #include <windows.h>
36 #undef WIN32_LEAN_AND_MEAN
37 #endif
38 #ifdef HAVE_SYS_TIME_H
39 #include <sys/time.h>
40 #endif
41 #include <sys/queue.h>
42 #include <stdio.h>
43 #include <stdlib.h>
44 #ifndef WIN32
45 #ifdef HAVE_UNISTD_H
46 #include <unistd.h>
47 #endif
48 #endif
49 #include <errno.h>
50 #include <signal.h>
51 #include <string.h>
52 #include <assert.h>
53 #include <time.h>
54 
55 #include "opal/class/opal_object.h"
56 #include "opal/threads/mutex.h"
57 #include "opal/threads/threads.h"
58 #include "opal/util/output.h"
59 #include "opal/util/argv.h"
60 #include "opal/util/fd.h"
61 
62 #include "libevent2022.h"
63 #include "opal/mca/event/base/base.h"
64 
65 #include "libevent/event.h"
66 #include "libevent/event-internal.h"
67 
68 #include "opal/mca/event/event.h"
69 
70 static struct event_config *config=NULL;
71 extern char *ompi_event_module_include;
72 extern const struct eventop *ompi_eventops[];
73 
opal_event_base_create(void)74 opal_event_base_t* opal_event_base_create(void)
75 {
76     opal_event_base_t *base;
77 
78     base = event_base_new_with_config(config);
79     if (NULL == base) {
80         /* there is no backend method that does what we want */
81         opal_output(0, "No event method available");
82     }
83     return base;
84 }
85 
opal_event_init(void)86 int opal_event_init(void)
87 {
88     char **includes=NULL;
89     bool dumpit=false;
90     int i, j;
91 
92     if (opal_output_get_verbosity(opal_event_base_framework.framework_output) > 4) {
93         event_enable_debug_mode();
94         dumpit = true;
95     }
96 
97     if (NULL == ompi_event_module_include) {
98         /* Shouldn't happen, but... */
99         ompi_event_module_include = strdup("select");
100     }
101     includes = opal_argv_split(ompi_event_module_include,',');
102 
103     /* get a configuration object */
104     config = event_config_new();
105     /* cycle thru the available subsystems */
106     for (i = 0 ; NULL != ompi_eventops[i] ; ++i) {
107         /* if this module isn't included in the given ones,
108          * then exclude it
109          */
110         dumpit = true;
111         for (j=0; NULL != includes[j]; j++) {
112             if (0 == strcmp("all", includes[j]) ||
113                 0 == strcmp(ompi_eventops[i]->name, includes[j])) {
114                 dumpit = false;
115                 break;
116             }
117         }
118         if (dumpit) {
119             event_config_avoid_method(config, ompi_eventops[i]->name);
120         }
121     }
122     opal_argv_free(includes);
123 
124     return OPAL_SUCCESS;
125 }
126 
opal_event_finalize(void)127 int opal_event_finalize(void)
128 {
129     event_config_free(config);
130     return OPAL_SUCCESS;
131 }
132 
opal_event_alloc(void)133 opal_event_t* opal_event_alloc(void)
134 {
135     opal_event_t *ev;
136 
137     ev = (opal_event_t*)malloc(sizeof(opal_event_t));
138     return ev;
139 }
140