File: loop_child.c

package info (click to toggle)
prrte 3.0.13-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 9,128 kB
  • sloc: ansic: 80,431; sh: 4,289; perl: 3,195; makefile: 1,829; lex: 352; python: 239
file content (62 lines) | stat: -rw-r--r-- 1,626 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#include <getopt.h>

#include <pmix.h>

static bool verbose = false;

int main( int argc, char **argv )
{
    pmix_status_t rc;
    pmix_proc_t myproc;
    pmix_proc_t procs[2];
    pmix_value_t *returnval;
    pmix_info_t info;
    static struct option myoptions[] = {{"verbose", no_argument, NULL, 'v'},
                                        {0, 0, 0, 0}};
    int option_index;
    int opt;

    while ((opt = getopt_long(argc, argv, "v", myoptions, &option_index)) != -1) {
        switch (opt) {
            case 'v':
                verbose = true;
                break;
        }
    }

    rc = PMIx_Init(&myproc, NULL, 0);
    if (PMIX_SUCCESS != rc) {
        fprintf(stderr, "Failed to init\n");
        exit(1);
    }
    PMIX_INFO_LOAD(&info, PMIX_IMMEDIATE, NULL, PMIX_BOOL);
    rc = PMIx_Get(&myproc, PMIX_PARENT_ID, &info, 1, &returnval);
    if (PMIX_SUCCESS != rc) {
        fprintf(stderr, "[%s.%u]: Unable to retrieve parent\n", myproc.nspace, myproc.rank);
        goto done;
    }
    PMIX_XFER_PROCID(&procs[0], returnval->data.proc);
    PMIX_VALUE_RELEASE(returnval);

    PMIX_XFER_PROCID(&procs[1], &myproc);
    rc = PMIx_Connect(procs, 2, NULL, 0);
    if (PMIX_SUCCESS != rc) {
        fprintf(stderr, "[%s.%u]: Failed to connect\n", myproc.nspace, myproc.rank);
        exit(1);
    }

    PMIx_Disconnect(procs, 2, NULL, 0);

done:
    PMIx_Finalize(NULL, 0);
    if (verbose) {
        printf("[%s.%u]: exiting\n", myproc.nspace, myproc.rank);
    }
    return 0;
}