include @TOP_OBJDIR@/src/config/Makefile.lwp
-all: ${TOP_LIBDIR}/libprocmgmt.a ${TOP_INCDIR}/afs/procmgmt.h
+all: ${TOP_LIBDIR}/libprocmgmt.a ${TOP_INCDIR}/afs/procmgmt.h \
+ ${TOP_INCDIR}/afs/procmgmt_softsig.h
buildtools: ${TOP_INCDIR}/afs/procmgmt.h
${TOP_INCDIR}/afs/procmgmt.h: ${srcdir}/procmgmt.h
${INSTALL_DATA} $? $@
+${TOP_INCDIR}/afs/procmgmt_softsig.h: ${srcdir}/procmgmt_softsig.h
+ ${INSTALL_DATA} $? $@
+
#
# Build targets
#
${INSTALL_DATA} libprocmgmt.a ${DESTDIR}${libdir}/afs/libprocmgmt.a
${INSTALL_DATA} ${srcdir}/procmgmt.h \
${DESTDIR}${includedir}/afs/procmgmt.h
+ ${INSTALL_DATA} ${srcdir}/procmgmt_softsig.h \
+ ${DESTDIR}${includedir}/afs/procmgmt_softsig.h
dest: libprocmgmt.a
${INSTALL} -d ${DEST}/lib/afs
${INSTALL_DATA} libprocmgmt.a ${DEST}/lib/afs/libprocmgmt.a
${INSTALL_DATA} ${srcdir}/procmgmt.h \
${DEST}/include/afs/procmgmt.h
+ ${INSTALL_DATA} ${srcdir}/procmgmt_softsig.h \
+ ${DEST}/include/afs/procmgmt_softsig.h
#
# Misc targets
}
}
+/*!
+ * Initialize signal handling.
+ *
+ * \note The signature of this routine matches the opr softsig
+ * registration function opr_softsig_Init() used on
+ * unix. Since this process management library is
+ * initialized by DllMain when the library is loaded,
+ * this routine is currently a no op.
+ */
+int pmgt_SignalInit(void)
+{
+ /* no op */
+ return 0;
+}
+
+/*!
+ * Register a signal a handler.
+ *
+ * This routine is a variant of the original pmgt_SignalSet
+ * which returns a status code instead of the previously registered
+ * handler.
+ *
+ * \note The signature of this routine matches the opr softsig
+ * registration function opr_softsig_Register() used on
+ * unix.
+ */
+int pmgt_SignalRegister(int signo, void (__cdecl *handler)(int))
+{
+ struct sigaction sa;
+
+ sa.sa_handler = pmgt_SignalSet(signo, handler);
+ if (sa.sa_handler == SIG_ERR) {
+ return EINVAL;
+ } else {
+ return 0;
+ }
+}
+
/*
* pmgt_SignalRaiseLocal() -- Raise a signal in this process (C raise()
--- /dev/null
+/*
+ * Copyright 2015, Sine Nomine Associates
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef OPENAFS_PROCMGMT_SOFTSIG_H
+#define OPENAFS_PROCMGMT_SOFTSIG_H
+
+#ifdef AFS_NT40_ENV
+
+/*
+ * Windows implementation of the pthread soft signal processing.
+ *
+ * Similar to the replacment of signal, kill, etc, in procmgmt.h,
+ * this header replaces the opr softsig function names with the
+ * process management library names, to avoid sprinkling ifdefs
+ * in the code base. This header should been included after
+ * opr/softsig.h.
+ *
+ */
+
+#define opr_softsig_Init() pmgt_SignalInit()
+extern int pmgt_SignalInit(void);
+
+#define opr_softsig_Register(sig, handler) pmgt_SignalRegister(sig, handler)
+extern int pmgt_SignalRegister(int sig, void (__cdecl *handler)(int));
+
+#endif /* AFS_NT40_ENV */
+#endif /* OPENAFS_PROCMGMT_SOFTSIG_H */