Skip to content

Commit 807ad1a

Browse files
authored
Merge pull request #101 from openpmix/master
2 parents e6378c6 + bff13fb commit 807ad1a

File tree

7 files changed

+143
-112
lines changed

7 files changed

+143
-112
lines changed

src/hwloc/hwloc_base_util.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1645,14 +1645,10 @@ char *prte_hwloc_base_get_topo_signature(hwloc_topology_t topo)
16451645
int rc;
16461646

16471647
obj = hwloc_get_root_obj(topo);
1648-
if (obj->symmetric_subtree) {
1649-
rc = hwloc_topology_export_synthetic(topo, buffer, 4096,
1650-
HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS);
1651-
if (-1 == rc) {
1652-
snprintf(buffer, 4096, "NON-SYMMETRIC");
1653-
}
1654-
} else {
1655-
snprintf(buffer, 4096, "NON-SYMMETRIC");
1648+
rc = hwloc_topology_export_synthetic(topo, buffer, 4096,
1649+
HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS);
1650+
if (-1 == rc) {
1651+
snprintf(buffer, 4096, "NON-SYMMETRIC[%u]", prte_process_info.myproc.rank);
16561652
}
16571653

16581654

src/mca/ess/base/base.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* Copyright (c) 2013-2020 Intel, Inc. All rights reserved.
1616
* Copyright (c) 2019 Research Organization for Information Science
1717
* and Technology (RIST). All rights reserved.
18-
* Copyright (c) 2021-2023 Nanook Consulting. All rights reserved.
18+
* Copyright (c) 2021-2025 Nanook Consulting All rights reserved.
1919
* $COPYRIGHT$
2020
*
2121
* Additional copyrights may follow
@@ -68,7 +68,7 @@ PRTE_EXPORT int prte_ess_base_std_prolog(void);
6868
PRTE_EXPORT int prte_ess_base_prted_setup(void);
6969
PRTE_EXPORT int prte_ess_base_prted_finalize(void);
7070

71-
PRTE_EXPORT int prte_ess_base_setup_signals(char *signals);
71+
PRTE_EXPORT pmix_status_t prte_ess_base_setup_signals(char *signals);
7272

7373
/* Detect whether or not this proc is bound - if not,
7474
* see if it should bind itself

src/mca/ess/base/ess_base_frame.c

Lines changed: 76 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ char *prte_ess_base_nspace = NULL;
5353
char *prte_ess_base_vpid = NULL;
5454
pmix_list_t prte_ess_base_signals = PMIX_LIST_STATIC_INIT;
5555

56-
static char *forwarded_signals = NULL;
56+
static char *forwarded_signals = "all";
5757

5858
static int prte_ess_base_register(pmix_mca_base_register_flag_t flags)
5959
{
@@ -82,11 +82,13 @@ static int prte_ess_base_register(pmix_mca_base_register_flag_t flags)
8282
pmix_mca_base_var_register_synonym(ret, "prte", "prte", "ess", "num_procs",
8383
PMIX_MCA_BASE_VAR_SYN_FLAG_DEPRECATED);
8484

85-
forwarded_signals = NULL;
85+
forwarded_signals = "all";
8686
ret = pmix_mca_base_var_register("prte", "ess", "base", "forward_signals",
87-
"Comma-delimited list of additional signals (names or integers) to forward to "
88-
"application processes [\"none\" => forward nothing]. Signals provided by "
89-
"default include SIGTSTP, SIGUSR1, SIGUSR2, SIGABRT, SIGALRM, and SIGCONT",
87+
"Comma-delimited list of signals (names or integers) to be forwarded to "
88+
"application processes [\"none\" => forward nothing, \"all\" => forward all]. "
89+
"Signals provided by default depends upon system definitions. The SIGTERM, SIGHUP, "
90+
"SIGINT signals are always forwarded regardless of this param's settings. The "
91+
"SIGKILL and SIGPIPE signals cannot be forwarded.",
9092
PMIX_MCA_BASE_VAR_TYPE_STRING,
9193
&forwarded_signals);
9294
pmix_mca_base_var_register_synonym(ret, "prte", "ess", "hnp", "forward_signals",
@@ -104,14 +106,8 @@ static int prte_ess_base_close(void)
104106

105107
static int prte_ess_base_open(pmix_mca_base_open_flag_t flags)
106108
{
107-
int rc;
108-
109109
PMIX_CONSTRUCT(&prte_ess_base_signals, pmix_list_t);
110110

111-
if (PRTE_SUCCESS != (rc = prte_ess_base_setup_signals(forwarded_signals))) {
112-
return rc;
113-
}
114-
115111
return pmix_mca_base_framework_components_open(&prte_ess_base_framework, flags);
116112
}
117113

@@ -200,95 +196,110 @@ static struct known_signal known_signals[] = {
200196

201197
static bool signals_added = false;
202198

203-
int prte_ess_base_setup_signals(char *mysignals)
199+
pmix_status_t prte_ess_base_setup_signals(char *input)
204200
{
205201
int i, sval, nsigs;
206-
char **signals, *tmp;
202+
char *mysignals, **signals, *tmp, *sname=NULL;
207203
prte_ess_base_signal_t *sig;
208204
bool ignore, found;
209205

206+
if (NULL == input) {
207+
mysignals = forwarded_signals;
208+
} else {
209+
mysignals = input;
210+
}
211+
210212
/* if they told us "none", then nothing to do */
211-
if (NULL != mysignals && 0 == strcmp(mysignals, "none")) {
212-
return PRTE_SUCCESS;
213+
if (0 == strcasecmp(mysignals, "none") || signals_added) {
214+
return PMIX_SUCCESS;
213215
}
216+
signals_added = true; // only do this once
214217

215-
if (!signals_added) {
216-
/* we know that some signals are (nearly) always defined, regardless
217-
* of environment, so add them here */
218+
// handle the "all" special case
219+
if (0 == strcasecmp(mysignals, "all")) {
218220
nsigs = sizeof(known_signals) / sizeof(struct known_signal);
219221
for (i = 0; i < nsigs; i++) {
220222
if (known_signals[i].can_forward) {
223+
pmix_output_verbose(2, prte_ess_base_framework.framework_output,
224+
"Forwarding signal: %s", known_signals[i].signame);
221225
ESS_ADDSIGNAL(known_signals[i].signal, known_signals[i].signame);
222226
}
223227
}
224-
signals_added = true; // only do this once
228+
return PMIX_SUCCESS;
225229
}
226230

227-
/* see if they asked for anything beyond those - note that they may
228-
* have asked for some we already cover, and so we ignore any duplicates */
229-
if (NULL != mysignals) {
230-
/* if they told us "none", then dump the list */
231-
signals = PMIX_ARGV_SPLIT_COMPAT(mysignals, ',');
232-
for (i = 0; NULL != signals[i]; i++) {
233-
sval = 0;
234-
if (0 != strncmp(signals[i], "SIG", 3)) {
235-
/* treat it like a number */
236-
errno = 0;
237-
sval = strtoul(signals[i], &tmp, 10);
238-
if (0 != errno || '\0' != *tmp) {
239-
pmix_show_help("help-ess-base.txt", "ess-base:unknown-signal", true, signals[i],
240-
forwarded_signals);
241-
PMIX_ARGV_FREE_COMPAT(signals);
242-
return PRTE_ERR_SILENT;
243-
}
231+
/* see what they asked for - ignore any duplicates */
232+
signals = PMIX_ARGV_SPLIT_COMPAT(mysignals, ',');
233+
for (i = 0; NULL != signals[i]; i++) {
234+
sval = 0;
235+
if (0 != strncasecmp(signals[i], "SIG", 3)) {
236+
/* treat it like a number */
237+
errno = 0;
238+
sval = strtoul(signals[i], &tmp, 10);
239+
if (0 != errno || '\0' != *tmp) {
240+
pmix_show_help("help-ess-base.txt", "ess-base:unknown-signal", true,
241+
signals[i], mysignals);
242+
PMIX_ARGV_FREE_COMPAT(signals);
243+
return PMIX_ERR_SILENT;
244244
}
245-
246-
/* see if it is one we already covered */
247-
ignore = false;
248-
PMIX_LIST_FOREACH(sig, &prte_ess_base_signals, prte_ess_base_signal_t)
249-
{
250-
if (0 == strcasecmp(signals[i], sig->signame) || sval == sig->signal) {
251-
/* got it - we will ignore */
252-
ignore = true;
245+
// see if it's a known signal number
246+
sname = NULL;
247+
for (int j = 0; NULL != known_signals[j].signame; ++j) {
248+
if (sval == known_signals[j].signal) {
249+
sname = known_signals[j].signame;
253250
break;
254251
}
255252
}
256-
257-
if (ignore) {
258-
continue;
253+
if (NULL == sname) {
254+
sname = signals[i];
259255
}
260-
261-
/* see if they gave us a signal name */
256+
} else {
257+
/* they gave us a signal name */
262258
found = false;
263-
for (int j = 0; known_signals[j].signame; ++j) {
264-
if (0 == strcasecmp(signals[i], known_signals[j].signame)
265-
|| sval == known_signals[j].signal) {
259+
for (int j = 0; NULL != known_signals[j].signame; ++j) {
260+
if (0 == strcasecmp(signals[i], known_signals[j].signame) ||
261+
sval == known_signals[j].signal) {
266262
if (!known_signals[j].can_forward) {
267263
pmix_show_help("help-ess-base.txt", "ess-base:cannot-forward", true,
268-
known_signals[j].signame, forwarded_signals);
264+
known_signals[j].signame, mysignals);
269265
PMIX_ARGV_FREE_COMPAT(signals);
270-
return PRTE_ERR_SILENT;
266+
return PMIX_ERR_SILENT;
271267
}
272268
found = true;
273-
ESS_ADDSIGNAL(known_signals[j].signal, known_signals[j].signame);
269+
sval = known_signals[j].signal;
270+
sname = known_signals[j].signame;
274271
break;
275272
}
276273
}
277-
278274
if (!found) {
279-
if (0 == strncmp(signals[i], "SIG", 3)) {
280-
pmix_show_help("help-ess-base.txt", "ess-base:unknown-signal", true, signals[i],
281-
forwarded_signals);
282-
PMIX_ARGV_FREE_COMPAT(signals);
283-
return PRTE_ERR_SILENT;
284-
}
275+
pmix_show_help("help-ess-base.txt", "ess-base:unknown-signal", true,
276+
signals[i], mysignals);
277+
PMIX_ARGV_FREE_COMPAT(signals);
278+
return PMIX_ERR_SILENT;
279+
}
280+
}
285281

286-
ESS_ADDSIGNAL(sval, signals[i]);
282+
/* see if it is one we already covered */
283+
ignore = false;
284+
PMIX_LIST_FOREACH(sig, &prte_ess_base_signals, prte_ess_base_signal_t) {
285+
if (0 == strcasecmp(sname, sig->signame) || sval == sig->signal) {
286+
/* got it - we will ignore */
287+
ignore = true;
288+
break;
287289
}
288290
}
289-
PMIX_ARGV_FREE_COMPAT(signals);
291+
292+
if (ignore) {
293+
continue;
294+
}
295+
296+
pmix_output_verbose(2, prte_ess_base_framework.framework_output,
297+
"Forwarding signal: %s", sname);
298+
ESS_ADDSIGNAL(sval, sname);
290299
}
291-
return PRTE_SUCCESS;
300+
301+
PMIX_ARGV_FREE_COMPAT(signals);
302+
return PMIX_SUCCESS;
292303
}
293304

294305
/* instantiate the class */

0 commit comments

Comments
 (0)