From 560975fbd0c8f181342d71829a98d86dda4380bc Mon Sep 17 00:00:00 2001 From: Nurdin Premji Date: Tue, 29 Apr 2008 14:23:16 -0400 Subject: [PATCH] Added funit-signal.c --- frysk-core/frysk/pkglibdir/funit-signal.c | 130 +++++++++++++++++++++++++++++ 1 files changed, 130 insertions(+), 0 deletions(-) create mode 100644 frysk-core/frysk/pkglibdir/funit-signal.c diff --git a/frysk-core/frysk/pkglibdir/funit-signal.c b/frysk-core/frysk/pkglibdir/funit-signal.c new file mode 100644 index 0000000..f227d3d --- /dev/null +++ b/frysk-core/frysk/pkglibdir/funit-signal.c @@ -0,0 +1,130 @@ +// This file is part of the program FRYSK. +// +// Copyright 2008, Red Hat Inc. +// +// FRYSK is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// FRYSK is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with FRYSK; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// In addition, as a special exception, Red Hat, Inc. gives You the +// additional right to link the code of FRYSK with code not covered +// under the GNU General Public License ("Non-GPL Code") and to +// distribute linked combinations including the two, subject to the +// limitations in this paragraph. Non-GPL Code permitted under this +// exception must only link to the code of FRYSK through those well +// defined volatile interfaces identified in the file named EXCEPTION found in +// the source code files (the "Approved volatile interfaces"). The files of +// Non-GPL Code may instantiate templates or use macros or inline +// functions from the Approved volatile interfaces without causing the +// resulting work to be covered by the GNU General Public +// License. Only Red Hat, Inc. may make changes or additions to the +// list of Approved volatile interfaces. You must obey the GNU General Public +// License in all respects for all of the FRYSK code and other code +// used in conjunction with FRYSK except the Non-GPL Code covered by +// this exception. If you modify this file, you may extend this +// exception to your version of the file, but you are not obligated to +// do so. If you do not wish to provide this exception without +// modification, you must delete this exception statement from your +// version and license this file solely under the GPL without +// exception. + +#include +#include +#include +#include +#include +#include + +pthread_t tester_thread; + + +volatile int j = 0; +volatile int lock = 1; +volatile int sig; +volatile pid_t pid; + +void +*signal_parent () +{ + while (lock); + + kill (pid, sig); + + while(1); +} + +void +handler (int sig) +{ // _signalHandlerEntry_ + + if (sig == SIGUSR1) + { + --j; + ++j; + } + else + exit(EXIT_FAILURE); + + return; + +} + +int +main (int argc, char ** argv) +{ + + if (argc < 3) + { + printf("Usage: funit-signal \n"); + exit(0); + } + + errno = 0; + pid_t target_pid = (pid_t) strtoul(argv[1], (char **) NULL, 10); + if (errno) + { + perror ("Invalid pid"); + exit (EXIT_FAILURE); + } + + errno = 0; + int signal = (int) strtoul (argv[2], (char **) NULL, 10); + if (errno) + { + perror ("Invalid signal"); + exit (EXIT_FAILURE); + } + + pid = target_pid; + sig = signal; + + struct sigaction sa; + sa.sa_handler = handler; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sigaction(SIGUSR1, &sa, NULL); + + pthread_create (&tester_thread, NULL, signal_parent, NULL); + + lock = 0; + + while(1) + { + --j; + ++j; + --j; + ++j; + raise(SIGUSR1); // _signalRaiseCall_ + } + return 0; + +} -- 1.5.4.1