Changeset 0773396 in mainline for uspace/srv/taskmon/taskmon.c


Ignore:
Timestamp:
2013-12-25T13:05:25Z (10 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bc54126c
Parents:
f4a47e52 (diff), 6946f23 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

File:
1 edited

Legend:

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

    rf4a47e52 r0773396  
    11/*
    2  * Copyright (c) 2010 Jiri Svoboda
     2 * Copyright (c) 2013 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4141#include <task.h>
    4242#include <event.h>
     43#include <ipc/corecfg.h>
     44#include <loc.h>
    4345#include <macros.h>
    4446#include <errno.h>
     
    4749#define NAME  "taskmon"
    4850
     51static bool write_core_files;
     52
     53static void corecfg_client_conn(ipc_callid_t , ipc_call_t *, void *);
     54
    4955static void fault_event(ipc_callid_t callid, ipc_call_t *call)
    5056{
    5157        const char *fname;
    5258        char *s_taskid;
     59        char *dump_fname;
    5360        int rc;
    5461
     
    6976        fname = "/app/taskdump";
    7077
    71 #ifdef CONFIG_WRITE_CORE_FILES
    72         char *dump_fname;
     78        if (write_core_files) {
     79                if (asprintf(&dump_fname, "/data/core%" PRIu64, taskid) < 0) {
     80                        printf("Memory allocation failed.\n");
     81                        return;
     82                }
    7383
    74         if (asprintf(&dump_fname, "/data/core%" PRIu64, taskid) < 0) {
    75                 printf("Memory allocation failed.\n");
    76                 return;
     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);
    7790        }
    7891
    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
    8692        if (rc != EOK) {
    8793                printf("%s: Error spawning %s (%s).\n", NAME, fname,
    8894                    str_error(rc));
     95        }
     96}
     97
     98static 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
     103static 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
     109static 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                }
    89133        }
    90134}
     
    94138        printf("%s: Task Monitoring Service\n", NAME);
    95139       
     140#ifdef CONFIG_WRITE_CORE_FILES
     141        write_core_files = true;
     142#else
     143        write_core_files = false;
     144#endif
    96145        if (event_subscribe(EVENT_FAULT, 0) != EOK) {
    97146                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);
    98164                return -1;
    99165        }
Note: See TracChangeset for help on using the changeset viewer.