summaryrefslogtreecommitdiffstats
path: root/plugins/imsolaris/sun_cddl.c
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2010-04-19 18:39:55 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2010-04-19 18:39:55 +0200
commit84084ea2a178f782184d75db10f252efdc62fb5f (patch)
treefd8b135033d80289eb06e2e835d4ffec8e5e18d9 /plugins/imsolaris/sun_cddl.c
parent6b8e9477a2bd4810010ac91ba76909713b0dbb15 (diff)
downloadrsyslog-84084ea2a178f782184d75db10f252efdc62fb5f.tar.gz
rsyslog-84084ea2a178f782184d75db10f252efdc62fb5f.tar.xz
rsyslog-84084ea2a178f782184d75db10f252efdc62fb5f.zip
improved quality of imsolaris code
including refctoring for a more simple solution
Diffstat (limited to 'plugins/imsolaris/sun_cddl.c')
-rw-r--r--plugins/imsolaris/sun_cddl.c143
1 files changed, 33 insertions, 110 deletions
diff --git a/plugins/imsolaris/sun_cddl.c b/plugins/imsolaris/sun_cddl.c
index 69636df0..6d49c8bc 100644
--- a/plugins/imsolaris/sun_cddl.c
+++ b/plugins/imsolaris/sun_cddl.c
@@ -71,7 +71,14 @@
/* Buffer to allocate for error messages: */
#define ERRMSG_LEN 1024
-static struct pollfd Pfd; /* Pollfd for local the log device */
+/* Max number of door server threads for syslogd. Since door is used
+ * to check the health of syslogd, we don't need large number of
+ * server threads.
+ */
+#define MAX_DOOR_SERVER_THR 3
+
+
+struct pollfd sun_Pfd; /* Pollfd for local log device */
static int DoorFd = -1;
static int DoorCreated = 0;
@@ -82,14 +89,16 @@ static pthread_mutex_t door_server_cnt_lock = PTHREAD_MUTEX_INITIALIZER;
static uint_t door_server_cnt = 0;
static pthread_attr_t door_thr_attr;
-/*
- * the 'server' function that we export via the door. It does
+/* the 'server' function that we export via the door. It does
* nothing but return.
*/
/*ARGSUSED*/
static void
-server(void __attribute__((unused)) *cookie, char __attribute__((unused)) *argp, size_t __attribute__((unused)) arg_size,
- door_desc_t __attribute__((unused)) *dp, __attribute__((unused)) uint_t n)
+server( void __attribute__((unused)) *cookie,
+ char __attribute__((unused)) *argp,
+ size_t __attribute__((unused)) arg_size,
+ door_desc_t __attribute__((unused)) *dp,
+ __attribute__((unused)) uint_t n )
{
(void) door_return(NULL, 0, NULL, 0);
/* NOTREACHED */
@@ -102,8 +111,7 @@ create_door_thr(void __attribute__((unused)) *arg)
(void) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
(void) door_return(NULL, 0, NULL, 0);
- /*
- * If there is an error in door_return(), it will return here and
+ /* If there is an error in door_return(), it will return here and
* the thread will exit. Hence we need to decrement door_server_cnt.
*/
(void) pthread_mutex_lock(&door_server_cnt_lock);
@@ -113,13 +121,6 @@ create_door_thr(void __attribute__((unused)) *arg)
}
/*
- * Max number of door server threads for syslogd. Since door is used
- * to check the health of syslogd, we don't need large number of
- * server threads.
- */
-#define MAX_DOOR_SERVER_THR 3
-
-/*
* Manage door server thread pool.
*/
/*ARGSUSED*/
@@ -149,8 +150,7 @@ sun_delete_doorfiles(void)
err = errno;
(void) snprintf(line, sizeof (line),
"unlink() of %s failed - fatal", DoorFileName);
- errno = err;
- DBGPRINTF("%s", line);//logerror(line);
+ imsolaris_logerror(err, line);
DBGPRINTF("delete_doorfiles: error: %s, "
"errno=%d\n", line, err);
exit(1);
@@ -171,7 +171,7 @@ sun_delete_doorfiles(void)
errno = err;
(void) strlcat(line, " - fatal",
sizeof (line));
- //logerror(line);
+ imsolaris_logerror(err, line);
DBGPRINTF("delete_doorfiles: "
"error: %s, errno=%d\n",
line, err);
@@ -233,8 +233,7 @@ sun_open_door(void)
info.di_target, getpid());
DBGPRINTF("open_door: error: "
"%s\n", line);
- errno = 0;
- //logerror(line);
+ imsolaris_logerror(0, line);
exit(1);
}
}
@@ -256,8 +255,7 @@ sun_open_door(void)
DBGPRINTF("open_door: error: %s, "
"errno=%d\n", line,
err);
- errno = err;
- //logerror(line);
+ imsolaris_logerror(err, line);
sun_delete_doorfiles();
exit(1);
}
@@ -284,8 +282,7 @@ sun_open_door(void)
OLD_DOORFILE);
DBGPRINTF("open_door: error: "
"%s\n", line);
- errno = 0;
- //logerror(line);
+ imsolaris_logerror(0, line);
sun_delete_doorfiles();
exit(1);
}
@@ -306,8 +303,7 @@ sun_open_door(void)
"errno=%d\n",
line, err);
(void) strcat(line, " - fatal");
- errno = err;
- //logerror(line);
+ imsolaris_logerror(err, line);
sun_delete_doorfiles();
exit(1);
}
@@ -333,9 +329,8 @@ sun_open_door(void)
DBGPRINTF("open_door: error: %s, "
"errno=%d\n", line,
err);
- errno = err;
(void) strcat(line, " - fatal");
- //logerror(line);
+ imsolaris_logerror(err, line);
sun_delete_doorfiles();
exit(1);
}
@@ -356,8 +351,7 @@ sun_open_door(void)
(void) sprintf(line, "door_create() failed - fatal");
DBGPRINTF("open_door: error: %s, errno=%d\n",
line, err);
- errno = err;
- //logerror(line);
+ imsolaris_logerror(err, line);
sun_delete_doorfiles();
exit(1);
}
@@ -378,8 +372,7 @@ sun_open_door(void)
" %d to %s failed - fatal", DoorFd, DoorFileName);
DBGPRINTF("open_door: error: %s, errno=%d\n",
line, err);
- errno = err;
- //logerror(line);
+ imsolaris_logerror(err, line);
sun_delete_doorfiles();
exit(1);
}
@@ -394,15 +387,16 @@ sun_open_door(void)
* and return a file descriptor.
*/
rsRetVal
-sun_openklog(char *name, int *fd)
+sun_openklog(char *name)
{
DEFiRet;
+ int fd;
struct strioctl str;
char errBuf[1024];
- if((*fd = open(name, O_RDONLY)) < 0) {
+ if((fd = open(name, O_RDONLY)) < 0) {
rs_strerror_r(errno, errBuf, sizeof(errBuf));
- dbgprintf("imsolaris:openklog: cannot open %s: %s\n",
+ DBGPRINTF("imsolaris:openklog: cannot open %s: %s\n",
name, errBuf);
ABORT_FINALIZE(RS_RET_ERR_OPEN_KLOG);
}
@@ -410,87 +404,16 @@ sun_openklog(char *name, int *fd)
str.ic_timout = 0;
str.ic_len = 0;
str.ic_dp = NULL;
- if (ioctl(*fd, I_STR, &str) < 0) {
+ if (ioctl(fd, I_STR, &str) < 0) {
rs_strerror_r(errno, errBuf, sizeof(errBuf));
- dbgprintf("imsolaris:openklog: cannot register to log "
+ DBGPRINTF("imsolaris:openklog: cannot register to log "
"console messages: %s\n", errBuf);
ABORT_FINALIZE(RS_RET_ERR_AQ_CONLOG);
}
- Pfd.fd = *fd;
- Pfd.events = POLLIN;
- dbgprintf("imsolaris/openklog: opened '%s' as fd %d.\n", name, *fd);
+ sun_Pfd.fd = fd;
+ sun_Pfd.events = POLLIN;
+ DBGPRINTF("imsolaris/openklog: opened '%s' as fd %d.\n", name, fd);
finalize_it:
RETiRet;
}
-
-
-/* this thread listens to the local stream log driver for log messages
- * generated by this host, formats them, and queues them to the logger
- * thread.
- */
-/*ARGSUSED*/
-void
-sun_sys_poll()
-{
- int nfds;
-
- dbgprintf("imsolaris:sys_poll: sys_thread started\n");
-
- for (;;) {
- errno = 0;
-
- dbgprintf("imsolaris:sys_poll waiting for next message...\n");
- nfds = poll(&Pfd, 1, INFTIM);
-
- if (nfds == 0)
- continue;
-
- if (nfds < 0) {
- if (errno != EINTR)
- dbgprintf("imsolaris:poll error");
- continue;
- }
- if (Pfd.revents & POLLIN) {
- solaris_readLog(Pfd.fd);
- } else {
- /* TODO: shutdown, the rsyslog way (in v5!) -- check shutdown flag */
- if (Pfd.revents & (POLLNVAL|POLLHUP|POLLERR)) {
- // TODO: trigger retry logic
-/* logerror("kernel log driver poll error");
- (void) close(Pfd.fd);
- Pfd.fd = -1;
- */
- }
- }
-
- }
- /*NOTREACHED*/
-}
-
-
-/* Open the log device, and pull up all pending messages.
- */
-void
-prepare_sys_poll()
-{
- int nfds;
-
- Pfd.events = POLLIN;
-
- for (;;) {
- dbgprintf("imsolaris:prepare_sys_poll waiting for next message...\n");
- nfds = poll(&Pfd, 1, 0);
- if (nfds <= 0) {
- break;
- }
-
- if (Pfd.revents & POLLIN) {
- solaris_readLog(Pfd.fd);
- } else if (Pfd.revents & (POLLNVAL|POLLHUP|POLLERR)) {
- //logerror("kernel log driver poll error");
- break;
- }
- }
-
-}