Blame SOURCES/redhat-bugzilla-1804146.patch

b3488a
diff -Naurp pcp-4.3.2-orig/src/pcp/atop/atop.c pcp-4.3.2/src/pcp/atop/atop.c
b3488a
--- pcp-4.3.2-orig/src/pcp/atop/atop.c	2019-03-14 08:01:57.000000000 +1100
b3488a
+++ pcp-4.3.2/src/pcp/atop/atop.c	2020-02-19 12:43:05.073078137 +1100
b3488a
@@ -632,14 +632,12 @@ engine(void)
b3488a
 		*/
b3488a
 		if (nprocexit > 0)
b3488a
 		{
b3488a
-			curpexit = malloc(nprocexit * sizeof(struct tstat));
b3488a
+			curpexit = calloc(nprocexit, sizeof(struct tstat));
b3488a
 
b3488a
 			ptrverify(curpexit,
b3488a
 			          "Malloc failed for %lu exited processes\n",
b3488a
 			          nprocexit);
b3488a
 
b3488a
-			memset(curpexit, 0, nprocexit * sizeof(struct tstat));
b3488a
-
b3488a
 			nprocexit = acctphotoproc(curpexit, nprocexit);
b3488a
 
b3488a
 			/*
b3488a
diff -Naurp pcp-4.3.2-orig/src/pcp/atop/deviate.c pcp-4.3.2/src/pcp/atop/deviate.c
b3488a
--- pcp-4.3.2-orig/src/pcp/atop/deviate.c	2019-03-08 08:26:34.000000000 +1100
b3488a
+++ pcp-4.3.2/src/pcp/atop/deviate.c	2020-02-19 12:43:05.076078101 +1100
b3488a
@@ -84,7 +84,7 @@ deviattask(struct tstat    *curtpres, un
b3488a
 	** create list for the sample deviations of all tasks
b3488a
 	*/
b3488a
  	devtstat->ntaskall = ntaskpres + nprocexit;
b3488a
-	devtstat->taskall  = malloc(devtstat->ntaskall * sizeof(struct tstat));
b3488a
+	devtstat->taskall  = calloc(devtstat->ntaskall, sizeof(struct tstat));
b3488a
 
b3488a
 	ptrverify(devtstat->taskall, "Malloc failed for %lu deviated tasks\n",
b3488a
                                   devtstat->ntaskall);
b3488a
@@ -371,9 +371,9 @@ deviattask(struct tstat    *curtpres, un
b3488a
 	/*
b3488a
 	** create and fill other pointer lists
b3488a
 	*/
b3488a
-	devtstat->procall    = malloc(devtstat->nprocall *
b3488a
+	devtstat->procall    = calloc(devtstat->nprocall,
b3488a
 						sizeof(struct tstat *));
b3488a
-	devtstat->procactive = malloc(devtstat->nprocactive *
b3488a
+	devtstat->procactive = calloc(devtstat->nprocactive,
b3488a
 						sizeof(struct tstat *));
b3488a
 
b3488a
 	ptrverify(devtstat->procall, "Malloc failed for %d processes\n",
b3488a
diff -Naurp pcp-4.3.2-orig/src/pcp/atop/photoproc.c pcp-4.3.2/src/pcp/atop/photoproc.c
b3488a
--- pcp-4.3.2-orig/src/pcp/atop/photoproc.c	2019-01-24 10:23:34.000000000 +1100
b3488a
+++ pcp-4.3.2/src/pcp/atop/photoproc.c	2020-02-19 12:43:05.076078101 +1100
b3488a
@@ -166,8 +166,10 @@ photoproc(struct tstat **tasks, unsigned
b3488a
 		fprintf(stderr, "%s: done %lu processes\n", pmGetProgname(), count);
b3488a
 
b3488a
 	pmFreeResult(result);
b3488a
-	free(insts);
b3488a
-	free(pids);
b3488a
+	if (count > 0) {
b3488a
+	    free(insts);
b3488a
+	    free(pids);
b3488a
+	}
b3488a
 
b3488a
 	return count;
b3488a
 }
b3488a
diff -Naurp pcp-4.3.2-orig/src/pcp/atop/showlinux.c pcp-4.3.2/src/pcp/atop/showlinux.c
b3488a
--- pcp-4.3.2-orig/src/pcp/atop/showlinux.c	2019-01-24 10:24:56.000000000 +1100
b3488a
+++ pcp-4.3.2/src/pcp/atop/showlinux.c	2020-02-19 12:43:05.077078090 +1100
b3488a
@@ -654,19 +654,22 @@ totalcap(struct syscap *psc, struct ssta
b3488a
 		struct tstat 	*curstat = *(proclist+i);
b3488a
 		count_t		nett_wsz;
b3488a
 
b3488a
-		psc->availnet += curstat->net.tcpssz;
b3488a
-		psc->availnet += curstat->net.tcprsz;
b3488a
-		psc->availnet += curstat->net.udpssz;
b3488a
-		psc->availnet += curstat->net.udprsz;
b3488a
-
b3488a
-		if (curstat->dsk.wsz > curstat->dsk.cwsz)
b3488a
-			nett_wsz = curstat->dsk.wsz -
b3488a
-			           curstat->dsk.cwsz;
b3488a
-		else
b3488a
-			nett_wsz = 0;
b3488a
+		if (curstat)
b3488a
+		{
b3488a
+			psc->availnet += curstat->net.tcpssz;
b3488a
+			psc->availnet += curstat->net.tcprsz;
b3488a
+			psc->availnet += curstat->net.udpssz;
b3488a
+			psc->availnet += curstat->net.udprsz;
b3488a
+
b3488a
+			if (curstat->dsk.wsz > curstat->dsk.cwsz)
b3488a
+				nett_wsz = curstat->dsk.wsz -
b3488a
+					   curstat->dsk.cwsz;
b3488a
+			else
b3488a
+				nett_wsz = 0;
b3488a
 
b3488a
-		psc->availdsk += curstat->dsk.rsz;
b3488a
-		psc->availdsk += nett_wsz;
b3488a
+			psc->availdsk += curstat->dsk.rsz;
b3488a
+			psc->availdsk += nett_wsz;
b3488a
+		}
b3488a
 	}
b3488a
 
b3488a
 	for (psc->availgpumem=i=0; i < sstat->gpu.nrgpus; i++)
b3488a
@@ -985,8 +988,11 @@ pricumproc(struct sstat *sstat, struct d
b3488a
         {
b3488a
 		struct tstat *curstat = *(devtstat->procactive+i);
b3488a
 
b3488a
-                extra.totut	+= curstat->cpu.utime;
b3488a
-                extra.totst 	+= curstat->cpu.stime;
b3488a
+		if (curstat)
b3488a
+		{
b3488a
+			extra.totut	+= curstat->cpu.utime;
b3488a
+			extra.totst 	+= curstat->cpu.stime;
b3488a
+		}
b3488a
         }
b3488a
 
b3488a
         extra.nproc	= devtstat->nprocall;