15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * CDDL HEADER START
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * The contents of this file are subject to the terms of the
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Common Development and Distribution License (the "License").
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * You may not use this file except in compliance with the License.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * or http://www.opensolaris.org/os/licensing.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * See the License for the specific language governing permissions
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * and limitations under the License.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * When distributing Covered Code, include this CDDL HEADER in each
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * If applicable, add the following below this CDDL HEADER, with the
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * fields enclosed by brackets "[]" replaced with your own identifying
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * information: Portions Copyright [yyyy] [name of copyright owner]
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * CDDL HEADER END
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Copyright (c) 2008-2009, Intel Corporation.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * All Rights Reserved.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <unistd.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <getopt.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <stdio.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <string.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <stdlib.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <limits.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <libgen.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include <signal.h>
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#include "latencytop.h"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#define CMPOPT(a, b) strncmp((a), (b), sizeof (b))
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems/*
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems * This variable is used to check if "dynamic variable drop" in dtrace
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems * has happened.
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems */
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystemsboolean_t lt_drop_detected = 0;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemslt_config_t g_config;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemstypedef enum {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_INTERVAL,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_LOG_FILE,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_LOG_LEVEL,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_LOG_INTERVAL,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_CONFIG_FILE,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_F_FILTER,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_F_SCHED,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_F_SOBJ,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_F_LOW,
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems LT_CMDOPT_SELECT,
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems LT_CMDOPT__LAST /* Must be the last one */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems} lt_cmd_option_id_t;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Check for duplicate command line options.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Returns TRUE if duplicate options with different values are found,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * returns FALSE otherwise.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsstatic int
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemscheck_opt_dup(lt_cmd_option_id_t id, uint64_t value) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems static int opt_set[(int)LT_CMDOPT__LAST];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems static uint64_t opt_val[(int)LT_CMDOPT__LAST];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems const char *errmsg[] = {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-t is set more than once with different values.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-o is set more than once.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-k is set more than once with different values.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-l is set more than once with different values.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-c is set more than once.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-f [no]filter is set more than once with different values.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-f [no]sched is set more than once with different values.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-f [no]sobj is set more than once with different values.",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "-f [no]low is set more than once with different values.",
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems "-s is set more than once with different values."
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems };
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_assert(sizeof (errmsg)/sizeof (errmsg[0]) == (int)LT_CMDOPT__LAST);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (!opt_set[(int)id]) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems opt_set[(int)id] = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems opt_val[(int)id] = value;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return (FALSE);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (opt_val[(int)id] != value) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "%s\n", errmsg[(int)id]);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return (TRUE);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return (FALSE);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Print command-line help message.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsstatic void
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsprint_usage(const char *execname, int long_help)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems char buffer[PATH_MAX];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) snprintf(buffer, sizeof (buffer), "%s", execname);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (!long_help) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /* Print short help to stderr. */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "Usage: %s [option(s)], ",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems basename(buffer));
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "use '%s -h' for details.\n",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems basename(buffer));
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) printf("Usage: %s [option(s)]\n", basename(buffer));
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) printf("Options:\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " -h, --help\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Print this help.\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " -t, --interval TIME\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Set refresh interval to TIME. "
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "Valid range [1...60] seconds, default = 5\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Option "-c, --config FILE" is not user-visible for now.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * When we have chance to properly document the format of translation
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * rules, we'll make it user-visible.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " -o, --output-log-file FILE\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Output kernel log to FILE. Default = "
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems DEFAULT_KLOG_FILE "\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " -k, --kernel-log-level LEVEL\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Set kernel log level to LEVEL.\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " 0(default) = None, 1 = Unmapped, 2 = Mapped, 3 = All.\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " -f, --feature [no]feature1,[no]feature2,...\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Enable/disable features in LatencyTOP.\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " [no]filter:\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Filter large interruptible latencies, e.g. sleep.\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " [no]sched:\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Monitors sched (PID=0).\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " [no]sobj:\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Monitors synchronization objects.\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " [no]low:\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " Lower overhead by sampling small latencies.\n"
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems " -l, --log-period TIME\n"
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems " Write and restart log every TIME seconds, TIME >= 60\n"
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems " -s --select [ pid=<pid> | pgid=<pgid> ]\n"
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems " Monitor only the given process or processes in the "
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems "given process group.\n");
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Properly exit latencytop when it receives SIGINT or SIGTERM.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/* ARGSUSED */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsstatic void
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemssignal_handler(int sig)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_gpipe_break("q");
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Convert string to integer. It returns error if extra characters are found.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsstatic int
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsto_int(const char *str, int *result)
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems char *tail = NULL;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems long ret;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (str == NULL || result == NULL) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return (-1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems ret = strtol(str, &tail, 10);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (tail != NULL && *tail != '\0') {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return (-1);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems *result = (int)ret;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return (0);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems/*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * The main function.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsint
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsmain(int argc, char *argv[])
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems{
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems const char *opt_string = "t:o:k:hf:l:c:s:";
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems struct option const longopts[] = {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {"interval", required_argument, NULL, 't'},
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {"output-log-file", required_argument, NULL, 'o'},
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {"kernel-log-level", required_argument, NULL, 'k'},
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {"help", no_argument, NULL, 'h'},
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {"feature", required_argument, NULL, 'f'},
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {"log-period", required_argument, NULL, 'l'},
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {"config", required_argument, NULL, 'c'},
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems {"select", required_argument, NULL, 's'},
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems {NULL, 0, NULL, 0}
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems };
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int optc;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int longind = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int running = 1;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int unknown_option = FALSE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int refresh_interval = 5;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int klog_level = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int log_interval = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems long long last_logged = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems char *token = NULL;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int retval = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int gpipe;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int err;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems uint64_t collect_end;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems uint64_t current_time;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems uint64_t delta_time;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems char logfile[PATH_MAX] = "";
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems int select_id;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems int select_value;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems char *select_str;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems boolean_t no_dtrace_cleanup = B_TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_gpipe_init();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) signal(SIGINT, signal_handler);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) signal(SIGTERM, signal_handler);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /* Default global settings */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_enable_filter = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_sched = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_syncobj = 1;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_low_overhead_mode = 0;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_pid = 0;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_pgid = 0;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /* dtrace snapshot every 1 second */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_snap_interval = 1000;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#ifdef EMBED_CONFIGS
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_config_name = NULL;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#else
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_config_name = lt_strdup(DEFAULT_CONFIG_NAME);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems#endif
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /* Parse command line arguments. */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems while ((optc = getopt_long(argc, argv, opt_string,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems longopts, &longind)) != -1) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems switch (optc) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems case 'h':
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems print_usage(argv[0], TRUE);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems goto end_none;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems case 't':
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (to_int(optarg, &refresh_interval) != 0 ||
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems refresh_interval < 1 || refresh_interval > 60) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error(
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "Invalid refresh interval: %s\n", optarg);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (check_opt_dup(LT_CMDOPT_INTERVAL,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems refresh_interval)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems case 'k':
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (to_int(optarg, &klog_level) != 0 ||
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_klog_set_log_level(klog_level) != 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error(
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "Invalid log level: %s\n", optarg);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (check_opt_dup(LT_CMDOPT_LOG_LEVEL,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems refresh_interval)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems case 'o':
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (check_opt_dup(LT_CMDOPT_LOG_FILE, optind)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (strlen(optarg) >= sizeof (logfile)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error(
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "Log file name is too long: %s\n",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems optarg);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) strncpy(logfile, optarg,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems sizeof (logfile));
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems case 'f':
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems for (token = strtok(optarg, ","); token != NULL;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems token = strtok(NULL, ",")) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int v = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (strncmp(token, "no", 2) == 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems v = FALSE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems token = &token[2];
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (CMPOPT(token, "filter") == 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (check_opt_dup(LT_CMDOPT_F_FILTER,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems v)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_enable_filter
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems = v;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (CMPOPT(token, "sched") == 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (check_opt_dup(LT_CMDOPT_F_SCHED,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems v)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_sched
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems = v;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (CMPOPT(token, "sobj") == 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (check_opt_dup(LT_CMDOPT_F_SOBJ,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems v)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_syncobj
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems = v;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (CMPOPT(token, "low") == 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (check_opt_dup(LT_CMDOPT_F_LOW,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems v)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_cfg_low_overhead_mode
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems = v;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error(
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "Unknown feature: %s\n", token);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems case 'l':
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (to_int(optarg, &log_interval) != 0 ||
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems log_interval < 60) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error(
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "Invalid log interval: %s\n", optarg);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (check_opt_dup(LT_CMDOPT_LOG_INTERVAL,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems log_interval)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems case 'c':
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (strlen(optarg) >= PATH_MAX) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error(
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems "Configuration name is too long.\n");
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (check_opt_dup(LT_CMDOPT_CONFIG_FILE,
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems optind)) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_config_name =
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_strdup(optarg);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems break;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems case 's':
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems if (strncmp(optarg, "pid=", 4) == 0) {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems select_id = 0;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems select_str = &optarg[4];
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems } else if (strncmp(optarg, "pgid=", 5) == 0) {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems select_id = 1;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems select_str = &optarg[5];
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems } else {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems lt_display_error(
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems "Invalid select option: %s\n", optarg);
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems break;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems }
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems if (to_int(select_str, &select_value) != 0) {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems lt_display_error(
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems "Invalid select option: %s\n", optarg);
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems break;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems }
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems if (select_value <= 0) {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems lt_display_error(
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems "Process/process group ID must be "
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems "greater than 0: %s\n", optarg);
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems break;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems }
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems if (check_opt_dup(LT_CMDOPT_SELECT,
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems (((uint64_t)select_id) << 32) | select_value)) {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems break;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems }
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems if (select_id == 0) {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_pid = select_value;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems } else {
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems g_config.lt_cfg_trace_pgid = select_value;
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems default:
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (!unknown_option && strlen(logfile) > 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems err = lt_klog_set_log_file(logfile);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (err == -1) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error("Log file name is too long: %s\n",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems logfile);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } else if (err == -2) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error("Cannot write to log file: %s\n",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems logfile);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /* Throw error for invalid/junk arguments */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (optind < argc) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int tmpind = optind;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "Unknown option(s): ");
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems while (tmpind < argc) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "%s ", argv[tmpind++]);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "\n");
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems unknown_option = TRUE;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (unknown_option) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems print_usage(argv[0], FALSE);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems retval = 1;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems goto end_none;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) printf("%s\n%s\n", TITLE, COPYRIGHT);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /*
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems * Initialization
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_klog_init();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (lt_table_init() != 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error("Unable to load configuration table.\n");
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems retval = 1;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems goto end_notable;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (lt_dtrace_init() != 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_error("Unable to initialize dtrace.\n");
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems retval = 1;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems goto end_nodtrace;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems last_logged = lt_millisecond();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) printf("Collecting data for %d seconds...\n",
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems refresh_interval);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems gpipe = lt_gpipe_readfd();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems collect_end = last_logged + refresh_interval * 1000;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems for (;;) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems fd_set read_fd;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems struct timeval timeout;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems int tsleep = collect_end - lt_millisecond();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (tsleep <= 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems break;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems /*
a9c12afde877c596eed286ac3f1d518246e5cd1eKrishnendu Sadhukhan - Sun Microsystems * Interval when we call dtrace_status() and collect
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems * aggregated data.
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems */
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems if (tsleep > g_config.lt_cfg_snap_interval) {
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems tsleep = g_config.lt_cfg_snap_interval;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems timeout.tv_sec = tsleep / 1000;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems timeout.tv_usec = (tsleep % 1000) * 1000;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems FD_ZERO(&read_fd);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems FD_SET(gpipe, &read_fd);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (select(gpipe + 1, &read_fd, NULL, NULL, &timeout) > 0) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems goto end_ubreak;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) lt_dtrace_work(0);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_init();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems do {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems current_time = lt_millisecond();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_stat_clear_all();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems (void) lt_dtrace_collect();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems delta_time = current_time;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems current_time = lt_millisecond();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems delta_time = current_time - delta_time;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (log_interval > 0 &&
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems current_time - last_logged > log_interval * 1000) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_klog_write();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems last_logged = current_time;
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems running = lt_display_loop(refresh_interval * 1000 -
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems delta_time);
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems /*
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems * This is to avoid dynamic variable drop
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems * in DTrace.
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems */
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems if (lt_drop_detected == B_TRUE) {
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems if (lt_dtrace_deinit() != 0) {
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems no_dtrace_cleanup = B_FALSE;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems retval = 1;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems break;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems }
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems lt_drop_detected = B_FALSE;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems if (lt_dtrace_init() != 0) {
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems retval = 1;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems break;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems }
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems } while (running != 0);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_klog_write();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems /* Cleanup */
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_display_deinit();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsend_ubreak:
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems if (no_dtrace_cleanup == B_FALSE || lt_dtrace_deinit() != 0)
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems retval = 1;
1a1f79f5a554655d51ccfdc74953bc86dc99d174Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_stat_free_all();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsend_nodtrace:
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_table_deinit();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsend_notable:
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_klog_deinit();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystemsend_none:
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems lt_gpipe_deinit();
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems if (g_config.lt_cfg_config_name != NULL) {
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems free(g_config.lt_cfg_config_name);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems }
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems return (retval);
15db28971f91c98efb449aebf46024ac72779fa3Krishnendu Sadhukhan - Sun Microsystems}