summaryrefslogtreecommitdiff
path: root/db2/progs/db_deadlock/db_deadlock.c
diff options
context:
space:
mode:
Diffstat (limited to 'db2/progs/db_deadlock/db_deadlock.c')
-rw-r--r--db2/progs/db_deadlock/db_deadlock.c245
1 files changed, 0 insertions, 245 deletions
diff --git a/db2/progs/db_deadlock/db_deadlock.c b/db2/progs/db_deadlock/db_deadlock.c
deleted file mode 100644
index bc5039e95f..0000000000
--- a/db2/progs/db_deadlock/db_deadlock.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*-
- * See the file LICENSE for redistribution information.
- *
- * Copyright (c) 1996, 1997, 1998
- * Sleepycat Software. All rights reserved.
- */
-
-#include "config.h"
-
-#ifndef lint
-static const char copyright[] =
-"@(#) Copyright (c) 1996, 1997, 1998\n\
- Sleepycat Software Inc. All rights reserved.\n";
-static const char sccsid[] = "@(#)db_deadlock.c 10.23 (Sleepycat) 10/4/98";
-#endif
-
-#ifndef NO_SYSTEM_INCLUDES
-#include <sys/types.h>
-
-#include <errno.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <unistd.h>
-#endif
-
-#include "db_int.h"
-#include "clib_ext.h"
-#include "common_ext.h"
-
-#define BAD_KILLID 0xffffffff
-
-DB_ENV *db_init __P((char *, int));
-int logpid __P((char *, int));
-int main __P((int, char *[]));
-void onint __P((int));
-void siginit __P((void));
-void usage __P((void));
-
-int interrupted;
-const char
- *progname = "db_deadlock"; /* Program name. */
-
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- extern char *optarg;
- extern int optind;
- DB_ENV *dbenv;
- u_int32_t atype;
- time_t now;
- long usecs;
- u_int32_t flags;
- int ch, ret, verbose;
- char *home, *logfile;
-
- atype = DB_LOCK_DEFAULT;
- home = logfile = NULL;
- usecs = 0;
- flags = 0;
- ret = verbose = 0;
- while ((ch = getopt(argc, argv, "a:h:L:t:vw")) != EOF)
- switch (ch) {
- case 'a':
- switch (optarg[0]) {
- case 'o':
- atype = DB_LOCK_OLDEST;
- break;
- case 'y':
- atype = DB_LOCK_YOUNGEST;
- break;
- default:
- usage();
- /* NOTREACHED */
- }
- if (optarg[1] != '\0')
- usage();
- break;
- case 'h':
- home = optarg;
- break;
- case 'L':
- logfile = optarg;
- break;
- case 't':
- get_long(optarg, 1, LONG_MAX, &usecs);
- usecs *= 1000000;
- break;
- case 'v':
- verbose = 1;
- break;
- case 'w':
- LF_SET(DB_LOCK_CONFLICT);
- break;
- case '?':
- default:
- usage();
- }
- argc -= optind;
- argv += optind;
-
- if (argc != 0)
- usage();
-
- if (usecs == 0 && !LF_ISSET(DB_LOCK_CONFLICT)) {
- warnx("at least one of -t and -w must be specified");
- usage();
- }
-
- /*
- * We detect every 100ms (100000 us) when we're running in
- * DB_LOCK_CONFLICT mode.
- */
- if (usecs == 0)
- usecs = 100000;
-
- /* Initialize the deadlock detector by opening the lock manager. */
- siginit();
- dbenv = db_init(home, verbose);
-
- if (logfile != NULL && logpid(logfile, 1)) {
- (void)db_appexit(dbenv);
- return (1);
- }
-
- while (!interrupted) {
- if (dbenv->db_verbose != 0) {
- time(&now);
- warnx("Running at %.24s", ctime(&now));
- }
-
- if ((errno = lock_detect(dbenv->lk_info, flags, atype)) != 0) {
- ret = 1;
- warnx(NULL);
- break;
- }
-
- /* Make a pass every "usecs" usecs. */
- (void)usleep(usecs);
- }
-
- if (logfile != NULL && logpid(logfile, 0))
- ret = 1;
-
- if ((errno = db_appexit(dbenv)) != 0) {
- ret = 1;
- warn(NULL);
- }
-
- if (interrupted) {
- (void)signal(interrupted, SIG_DFL);
- (void)raise(interrupted);
- /* NOTREACHED */
- }
-
- return (ret);
-}
-
-DB_ENV *
-db_init(home, verbose)
- char *home;
- int verbose;
-{
- DB_ENV *dbenv;
-
- if ((dbenv = (DB_ENV *)calloc(sizeof(DB_ENV), 1)) == NULL) {
- errno = ENOMEM;
- err(1, NULL);
- }
- dbenv->db_errfile = stderr;
- dbenv->db_errpfx = progname;
- dbenv->db_verbose = verbose;
-
- if ((errno = db_appinit(home,
- NULL, dbenv, DB_INIT_LOCK | DB_USE_ENVIRON)) != 0)
- err(1, "db_appinit");
-
- return (dbenv);
-}
-
-/*
- * logpid --
- * Log that we're running.
- */
-int
-logpid(fname, is_open)
- char *fname;
- int is_open;
-{
- FILE *fp;
- time_t now;
-
- if (is_open) {
- if ((fp = fopen(fname, "w")) == NULL) {
- warn("%s", fname);
- return (1);
- }
- (void)time(&now);
- fprintf(fp,
- "%.24s: %lu %s", progname, (u_long)getpid(), ctime(&now));
- fclose(fp);
- } else
- (void)remove(fname);
- return (0);
-}
-
-/*
- * siginit --
- * Initialize the set of signals for which we want to clean up.
- * Generally, we try not to leave the shared regions locked if
- * we can.
- */
-void
-siginit()
-{
-#ifdef SIGHUP
- (void)signal(SIGHUP, onint);
-#endif
- (void)signal(SIGINT, onint);
- (void)signal(SIGTERM, onint);
-}
-
-/*
- * onint --
- * Interrupt signal handler.
- */
-void
-onint(signo)
- int signo;
-{
- if ((interrupted = signo) == 0)
- interrupted = SIGINT;
-}
-
-void
-usage()
-{
- (void)fprintf(stderr,
- "usage: db_deadlock [-vw] [-a m | o | y] [-h home] [-L file] [-t sec]\n");
- exit(1);
-}