From 27c00d461b2f97387478c36509d502b083e38093 Mon Sep 17 00:00:00 2001
From: Bjoern Esswein <bjoern.esswein@gmail.com>
Date: Tue, 18 Feb 2020 14:27:11 +0100
Subject: [PATCH] signal.c moved fork cause it is critical stuff

---
 Readme.md   | 12 ++++++------
 Zettel.html | 12 ++++++------
 signal.c    | 12 ++++++------
 3 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/Readme.md b/Readme.md
index 15cda65..45e8c21 100644
--- a/Readme.md
+++ b/Readme.md
@@ -196,7 +196,7 @@ int main() {
 # include <unistd.h>
 
 static void sigchldHandler(int sig);
-static int pcount;
+static int pcount = 0;
 
 int main() {
     struct sigaction handleSIGCHLD =
@@ -214,19 +214,19 @@ int main() {
     if (sigprocmask(SIG_BLOCK, &newMask, &oldMask) == -1) die("sigprocmask");
 
     //do critical stuff
-
-    //alte signal mask wiederherstellen
-    if (sigprocmask(SIG_SETMASK, &oldMask, NULL) == -1) die("sigprocmask");
-
     pid_t pid = fork();
     if(pid < 0) die("fork");
     if(pid == 0) {
         sleep(5);
         exit(EXIT_SUCCESS);
     }
+    pcount++;
+
+    //alte signal mask wiederherstellen
+    if (sigprocmask(SIG_SETMASK, &oldMask, NULL) == -1) die("sigprocmask");
+
 
     //passives warten
-    pcount = 1;
     if (sigprocmask(SIG_BLOCK, &newMask, &oldMask) == -1) die("sigprocmask");
     while (pcount > 0) {
         sigsuspend(&oldMask);
diff --git a/Zettel.html b/Zettel.html
index bd9949b..5388d8a 100644
--- a/Zettel.html
+++ b/Zettel.html
@@ -184,7 +184,7 @@ accept</p>
 <span class="hljs-meta"># <span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;unistd.h&gt;</span></span>
 
 <span class="hljs-function"><span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">sigchldHandler</span><span class="hljs-params">(<span class="hljs-keyword">int</span> sig)</span></span>;
-<span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> pcount;
+<span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> pcount = <span class="hljs-number">0</span>;
 
 <span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
     <span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">sigaction</span> <span class="hljs-title">handleSIGCHLD</span> =
@@ -202,19 +202,19 @@ accept</p>
     <span class="hljs-keyword">if</span> (sigprocmask(SIG_BLOCK, &amp;newMask, &amp;oldMask) == <span class="hljs-number">-1</span>) die(<span class="hljs-string">"sigprocmask"</span>);
 
     <span class="hljs-comment">//do critical stuff</span>
-
-    <span class="hljs-comment">//alte signal mask wiederherstellen</span>
-    <span class="hljs-keyword">if</span> (sigprocmask(SIG_SETMASK, &amp;oldMask, <span class="hljs-literal">NULL</span>) == <span class="hljs-number">-1</span>) die(<span class="hljs-string">"sigprocmask"</span>);
-
     <span class="hljs-keyword">pid_t</span> pid = fork();
     <span class="hljs-keyword">if</span>(pid &lt; <span class="hljs-number">0</span>) die(<span class="hljs-string">"fork"</span>);
     <span class="hljs-keyword">if</span>(pid == <span class="hljs-number">0</span>) {
         sleep(<span class="hljs-number">5</span>);
         <span class="hljs-built_in">exit</span>(EXIT_SUCCESS);
     }
+    pcount++;
+
+    <span class="hljs-comment">//alte signal mask wiederherstellen</span>
+    <span class="hljs-keyword">if</span> (sigprocmask(SIG_SETMASK, &amp;oldMask, <span class="hljs-literal">NULL</span>) == <span class="hljs-number">-1</span>) die(<span class="hljs-string">"sigprocmask"</span>);
+
 
     <span class="hljs-comment">//passives warten</span>
-    pcount = <span class="hljs-number">1</span>;
     <span class="hljs-keyword">if</span> (sigprocmask(SIG_BLOCK, &amp;newMask, &amp;oldMask) == <span class="hljs-number">-1</span>) die(<span class="hljs-string">"sigprocmask"</span>);
     <span class="hljs-keyword">while</span> (pcount &gt; <span class="hljs-number">0</span>) {
         sigsuspend(&amp;oldMask);
diff --git a/signal.c b/signal.c
index 7ef89f9..aed66a1 100644
--- a/signal.c
+++ b/signal.c
@@ -5,7 +5,7 @@
 #include <unistd.h>
 
 static void sigchldHandler(int sig);
-static int pcount;
+static int pcount = 0;
 
 int main() {
     struct sigaction handleSIGCHLD =
@@ -23,19 +23,19 @@ int main() {
     if (sigprocmask(SIG_BLOCK, &newMask, &oldMask) == -1) die("sigprocmask");
 
     //do critical stuff
-
-    //alte signal mask wiederherstellen
-    if (sigprocmask(SIG_SETMASK, &oldMask, NULL) == -1) die("sigprocmask");
-
     pid_t pid = fork();
     if(pid < 0) die("fork");
     if(pid == 0) {
         sleep(5);
         exit(EXIT_SUCCESS);
     }
+    pcount++;
+
+    //alte signal mask wiederherstellen
+    if (sigprocmask(SIG_SETMASK, &oldMask, NULL) == -1) die("sigprocmask");
+
 
     //passives warten
-    pcount = 1;
     if (sigprocmask(SIG_BLOCK, &newMask, &oldMask) == -1) die("sigprocmask");
     while (pcount > 0) {
         sigsuspend(&oldMask);
-- 
GitLab