Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/taskmon/taskmon.c

    r92c1680 r9d58539  
    11/*
    2  * Copyright (c) 2013 Jiri Svoboda
     2 * Copyright (c) 2010 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4141#include <task.h>
    4242#include <event.h>
    43 #include <ipc/corecfg.h>
    44 #include <loc.h>
    4543#include <macros.h>
    4644#include <errno.h>
     
    4947#define NAME  "taskmon"
    5048
    51 static bool write_core_files;
    52 
    53 static void corecfg_client_conn(ipc_callid_t , ipc_call_t *, void *);
    54 
    5549static void fault_event(ipc_callid_t callid, ipc_call_t *call)
    5650{
    5751        const char *fname;
    5852        char *s_taskid;
    59         char *dump_fname;
    6053        int rc;
    6154
     
    7669        fname = "/app/taskdump";
    7770
    78         if (write_core_files) {
    79                 if (asprintf(&dump_fname, "/data/core%" PRIu64, taskid) < 0) {
    80                         printf("Memory allocation failed.\n");
    81                         return;
    82                 }
     71#ifdef CONFIG_WRITE_CORE_FILES
     72        char *dump_fname;
    8373
    84                 printf(NAME ": Executing %s -c %s -t %s\n", fname, dump_fname, s_taskid);
    85                 rc = task_spawnl(NULL, fname, fname, "-c", dump_fname, "-t", s_taskid,
    86                     NULL);
    87         } else {
    88                 printf(NAME ": Executing %s -t %s\n", fname, s_taskid);
    89                 rc = task_spawnl(NULL, fname, fname, "-t", s_taskid, NULL);
     74        if (asprintf(&dump_fname, "/data/core%" PRIu64, taskid) < 0) {
     75                printf("Memory allocation failed.\n");
     76                return;
    9077        }
    9178
     79        printf(NAME ": Executing %s -c %s -t %s\n", fname, dump_fname, s_taskid);
     80        rc = task_spawnl(NULL, fname, fname, "-c", dump_fname, "-t", s_taskid,
     81            NULL);
     82#else
     83        printf(NAME ": Executing %s -t %s\n", fname, s_taskid);
     84        rc = task_spawnl(NULL, fname, fname, "-t", s_taskid, NULL);
     85#endif
    9286        if (rc != EOK) {
    9387                printf("%s: Error spawning %s (%s).\n", NAME, fname,
    9488                    str_error(rc));
    95         }
    96 }
    97 
    98 static void corecfg_get_enable_srv(ipc_callid_t iid, ipc_call_t *icall)
    99 {
    100         async_answer_1(iid, EOK, write_core_files);
    101 }
    102 
    103 static void corecfg_set_enable_srv(ipc_callid_t iid, ipc_call_t *icall)
    104 {
    105         write_core_files = IPC_GET_ARG1(*icall);
    106         async_answer_0(iid, EOK);
    107 }
    108 
    109 static void corecfg_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    110 {
    111         /* Accept the connection */
    112         async_answer_0(iid, EOK);
    113 
    114         while (true) {
    115                 ipc_call_t call;
    116                 ipc_callid_t callid = async_get_call(&call);
    117                 sysarg_t method = IPC_GET_IMETHOD(call);
    118 
    119                 if (!method) {
    120                         /* The other side has hung up */
    121                         async_answer_0(callid, EOK);
    122                         return;
    123                 }
    124 
    125                 switch (method) {
    126                 case CORECFG_GET_ENABLE:
    127                         corecfg_get_enable_srv(callid, &call);
    128                         break;
    129                 case CORECFG_SET_ENABLE:
    130                         corecfg_set_enable_srv(callid, &call);
    131                         break;
    132                 }
    13389        }
    13490}
     
    13894        printf("%s: Task Monitoring Service\n", NAME);
    13995       
    140 #ifdef CONFIG_WRITE_CORE_FILES
    141         write_core_files = true;
    142 #else
    143         write_core_files = false;
    144 #endif
    14596        if (event_subscribe(EVENT_FAULT, 0) != EOK) {
    14697                printf("%s: Error registering fault notifications.\n", NAME);
    147                 return -1;
    148         }
    149        
    150         async_set_client_connection(corecfg_client_conn);
    151        
    152         int rc = loc_server_register(NAME);
    153         if (rc != EOK) {
    154                 printf("%s: Failed registering server (%d).\n",
    155                     NAME, rc);
    156                 return -1;
    157         }
    158        
    159         service_id_t sid;
    160         rc = loc_service_register(SERVICE_NAME_CORECFG, &sid);
    161         if (rc != EOK) {
    162                 printf("%s: Failed registering service (%d).\n",
    163                     NAME, rc);
    16498                return -1;
    16599        }
Note: See TracChangeset for help on using the changeset viewer.