1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2015, Joyent, Inc.
14 */
15
16 /*
17 * No, 'tis not so deep as a well, nor so wide as a church door; but 'tis
18 * enough, 'twill serve. Ask for me tomorrow, and you shall find me a grave man.
19 *
20 * This file maintains various routines for handling when we die.
21 */
22
23 #include <stdio.h>
24 #include <stdarg.h>
25 #include <errno.h>
26 #include <thread.h>
27 #include <stdlib.h>
28
29 /*
30 * Normally these would be static, but if they're static, that throws off lint
31 * because it thinks we never use them, which is kind of the point, because we
32 * only read them in the core...
33 */
34 int varpd_panic_errno;
35 char varpd_panic_buf[1024];
36 thread_t varpd_panic_thread;
37
38 void
libvarpd_panic(const char * fmt,...)39 libvarpd_panic(const char *fmt, ...)
40 {
41 va_list ap;
42
43 /* Always save errno first! */
44 varpd_panic_errno = errno;
45 varpd_panic_thread = thr_self();
46
47 if (fmt != NULL) {
48 va_start(ap, fmt);
49 (void) vsnprintf(varpd_panic_buf, sizeof (varpd_panic_buf), fmt,
50 ap);
51 }
52 abort();
53 }
54