examples: spawntest changed to spawn using proc_mgmt
[barrelfish] / usr / examples / xmpl-spawn / spawn.c
1 /** \file
2  *  \brief Example spawn application
3  */
4
5 /*
6  * Copyright (c) 2010, ETH Zurich.
7  * All rights reserved.
8  *
9  * This file is distributed under the terms in the attached LICENSE file.
10  * If you do not find this file, copies can be found by writing to:
11  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
12  */
13
14 #include <stdio.h>
15 #include <string.h>
16
17 #include <barrelfish/barrelfish.h>
18 #include <barrelfish/proc_mgmt_client.h>
19
20 #define MAXPATH 256
21
22 int main(int argc, char *argv[])
23 {
24     errval_t err;
25     coreid_t mycore = disp_get_core_id();
26
27     debug_printf("This is xmpl-spawn on core %d\n", mycore);
28
29     int num_spawns = -1;
30     int num_cores = -1;
31     if (argc == 3) {
32         num_spawns = atoi(argv[1]);
33         num_cores = atoi(argv[2]);
34
35         char path[MAXPATH];
36         snprintf(path, MAXPATH, "examples/%s", argv[0]);
37         argv[1] = NULL;
38
39         struct capref ret_domain_cap;
40
41         coreid_t core = 0;
42         for (int i = 0; i < num_spawns; i++, core++) {
43             core %= num_cores;
44             /*
45               Signature for proc_mgmt_spawn_program is:
46
47               errval_t proc_mgmt_spawn_program(coreid_t coreid, const char *path,
48                 char *const argv[], char *const envp[],
49                 spawn_flags_t flags, struct capref *ret_domain_cap)
50             */
51                 err = proc_mgmt_spawn_program(core, path, argv, NULL, 0, 
52                                                   &ret_domain_cap);
53             if (err_is_fail(err)) {
54                 DEBUG_ERR(err, "failed spawn %d on core %d", i, core);
55             } else {
56                 debug_printf("program %d on core %"PRIuCOREID" spawned \n", i, core);
57             }
58         }
59     } else {
60         debug_printf("not spawning any programs\n");
61     }
62
63     debug_printf("Finished\n");
64 }