diff --git a/SOURCES/redhat-bugzilla-1947989.patch b/SOURCES/redhat-bugzilla-1947989.patch
new file mode 100644
index 0000000..afe4717
--- /dev/null
+++ b/SOURCES/redhat-bugzilla-1947989.patch
@@ -0,0 +1,849 @@
+commit 2bad6aef10339f000f7cb578108db5ee80bd640c
+Author: Mark Goodwin <mgoodwin@redhat.com>
+Date:   Wed Jun 9 17:04:33 2021 +1000
+
+    pmproxy: add mutex for client req lists, fix https/tls support, QA
+    
+    Add a new mutext to struct proxy and use it to protect parallel
+    multithreaded updates to the proxy->first client list.
+    
+    Also use the same mutext to protect updates to the pending_writes
+    client list and avoid the doubly linked list corruption that was
+    causing parallel https/tls requests to get stuck spinning in
+    flush_secure_module(), as reported in BZ#1947989.
+    
+    qa/1457 is extensively updated to test parallel http, https/tls
+    (and combinations of http and https/tls) RESTAPI calls. Previously
+    it only tested a single https/tls call.
+    
+    With these changes, parallel https/tls RESTAPI requests from the
+    grafana-pcp datasource to pmproxy now work correctly whereas previously
+    pmproxy would hang/spin.
+    
+    Resolves: RHBZ#1947989 - pmproxy hangs and consume 100% cpu if the
+    redis datasource is configured with TLS.
+    
+    Related: https://github.com/performancecopilot/pcp/issues/1311
+
+diff --git a/qa/1457 b/qa/1457
+index 94969f6e0..8bf395944 100755
+--- a/qa/1457
++++ b/qa/1457
+@@ -2,7 +2,7 @@
+ # PCP QA Test No. 1457
+ # Exercise HTTPS access to the PMWEBAPI(3).
+ #
+-# Copyright (c) 2019 Red Hat.
++# Copyright (c) 2019,2021 Red Hat.
+ #
+ 
+ seq=`basename $0`
+@@ -138,14 +138,59 @@ else
+ fi
+ 
+ date >>$seq.full
+-echo "=== checking TLS operation ===" | tee -a $seq.full
+-# (-k) allows us to use self-signed (insecure) certificates, so for testing only
+-# (-v) provides very detailed TLS connection information, for debugging only
+-curl -k --get 2>$tmp.err \
+-	"https://localhost:$port/pmapi/metric?name=sample.long.ten" \
+-	| _filter_json
+-cat $tmp.err >>$seq.full
++echo "=== checking serial http operation ===" | tee -a $seq.full
++for i in 1 2 3 4; do
++    curl -Gs "http://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i
++done
++for i in 1 2 3 4; do
++echo === out$i === | tee -a $seq.full
++_filter_json < $tmp.out$i
++done
++
++date >>$seq.full
++echo "=== checking parallel http operation ===" | tee -a $seq.full
++for i in 1 2 3 4; do
++    curl -Gs "http://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i & 2>/dev/null eval pid$i=$!
++done
++wait $pid1 $pid2 $pid3 $pid4
++for i in 1 2 3 4; do
++echo === out$i === | tee -a $seq.full
++_filter_json < $tmp.out$i
++done
++
++date >>$seq.full
++echo "=== checking serial https/TLS operation ===" | tee -a $seq.full
++for i in 1 2 3 4; do
++    curl -k -Gs "https://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i
++done
++for i in 1 2 3 4; do
++echo === out$i === | tee -a $seq.full
++_filter_json < $tmp.out$i
++done
++
+ date >>$seq.full
++echo "=== checking parallel https/TLS operation ===" | tee -a $seq.full
++for i in 1 2 3 4; do
++    curl -k -Gs "https://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i & 2>/dev/null eval pid$i=$!
++done
++wait $pid1 $pid2 $pid3 $pid4
++for i in 1 2 3 4; do
++echo === out$i === | tee -a $seq.full
++_filter_json < $tmp.out$i
++done
++
++date >>$seq.full
++echo "=== checking parallel mixed http and https/TLS operations ===" | tee -a $seq.full
++for i in 1 3 5 7; do
++    j=`expr $i + 1`
++    curl -k -Gs "http://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i & 2>/dev/null eval pid$i=$!
++    curl -k -Gs "https://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$j >$tmp.out$j & 2>/dev/null eval pid$j=$!
++done
++wait $pid1 $pid2 $pid3 $pid4 $pid5 $pid6 $pid7 $pid8
++for i in 1 2 3 4 5 6 7 8; do
++echo === out$i === | tee -a $seq.full
++_filter_json < $tmp.out$i
++done
+ 
+ echo "=== check pmproxy is running ==="
+ pminfo -v -h localhost@localhost:$port hinv.ncpu
+@@ -156,7 +201,7 @@ else
+ fi
+ 
+ # valgrind takes awhile to shutdown too
+-pmsignal $pid
++pmsignal $pid >/dev/null 2>&1
+ pmsleep 3.5
+ echo "=== valgrind stdout ===" | tee -a $seq.full
+ cat $tmp.valout | _filter_valgrind
+@@ -164,6 +209,9 @@ cat $tmp.valout | _filter_valgrind
+ echo "=== valgrind stderr ===" | tee -a $seq.full
+ cat $tmp.valerr | _filter_pmproxy_log | _filter_port
+ 
++# final kill if it's spinning
++$sudo kill -9 $pid >/dev/null 2>&1
++
+ # success, all done
+ status=0
+ exit
+diff --git a/qa/1457.out b/qa/1457.out
+index a7b64cdc5..422176db2 100644
+--- a/qa/1457.out
++++ b/qa/1457.out
+@@ -1,5 +1,539 @@
+ QA output created by 1457
+-=== checking TLS operation ===
++=== checking serial http operation ===
++=== out1 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out2 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out3 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out4 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== checking parallel http operation ===
++=== out1 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out2 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out3 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out4 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== checking serial https/TLS operation ===
++=== out1 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out2 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out3 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out4 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== checking parallel https/TLS operation ===
++=== out1 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out2 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out3 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out4 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== checking parallel mixed http and https/TLS operations ===
++=== out1 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out2 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out3 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out4 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out5 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out6 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out7 ===
++{
++    "context": "CONTEXT"
++    "metrics": [
++        {
++            "name": "sample.long.ten",
++            "series": "SERIES"
++            "pmid": "29.0.11",
++            "type": "32",
++            "sem": "instant",
++            "units": "none",
++            "labels": {
++                "agent": "sample",
++                "cluster": "zero",
++                "domainname": "DOMAINNAME"
++                "hostname": "HOSTNAME"
++                "role": "testing"
++            },
++            "text-oneline": "10 as a 32-bit integer",
++            "text-help": "10 as a 32-bit integer"
++        }
++    ]
++}
++=== out8 ===
+ {
+     "context": "CONTEXT"
+     "metrics": [
+diff --git a/qa/group b/qa/group
+index 462dffaaa..77cac788d 100644
+--- a/qa/group
++++ b/qa/group
+@@ -1818,7 +1818,7 @@ x11
+ 1436 pmda.postgresql local
+ 1437 pmda.kvm local
+ 1455 pmlogrewrite labels pmdumplog local
+-1457 pmproxy local
++1457 pmproxy libpcp_web threads secure local
+ 1480 pmda.lmsensors local
+ 1489 python pmrep pmimport local
+ 1490 python local labels
+diff --git a/src/pmproxy/src/secure.c b/src/pmproxy/src/secure.c
+index 77265894c..072e2a085 100644
+--- a/src/pmproxy/src/secure.c
++++ b/src/pmproxy/src/secure.c
+@@ -16,13 +16,25 @@
+ #include <openssl/opensslv.h>
+ #include <openssl/ssl.h>
+ 
++/* called with proxy->mutex locked */
+ static void
+ remove_connection_from_queue(struct client *client)
+ {
++    struct proxy *proxy = client->proxy;
++
+     if (client->secure.pending.writes_buffer != NULL)
+ 	free(client->secure.pending.writes_buffer);
+-    if (client->secure.pending.prev != NULL)
+-	*client->secure.pending.prev = client->secure.pending.next;
++    if (client->secure.pending.prev == NULL) {
++	/* next (if any) becomes first in pending_writes list */
++    	proxy->pending_writes = client->secure.pending.next;
++	if (proxy->pending_writes)
++	    proxy->pending_writes->secure.pending.prev = NULL;
++    }
++    else {
++	/* link next and prev */
++	client->secure.pending.prev->secure.pending.next = client->secure.pending.next;
++	client->secure.pending.next->secure.pending.prev = client->secure.pending.prev;
++    }
+     memset(&client->secure.pending, 0, sizeof(client->secure.pending));
+ }
+ 
+@@ -32,7 +44,9 @@ on_secure_client_close(struct client *client)
+     if (pmDebugOptions.auth || pmDebugOptions.http)
+ 	fprintf(stderr, "%s: client %p\n", "on_secure_client_close", client);
+ 
++    uv_mutex_lock(&client->proxy->mutex);
+     remove_connection_from_queue(client);
++    uv_mutex_unlock(&client->proxy->mutex);
+     /* client->read and client->write freed by SSL_free */
+     SSL_free(client->secure.ssl);
+ }
+@@ -40,6 +54,8 @@ on_secure_client_close(struct client *client)
+ static void
+ maybe_flush_ssl(struct proxy *proxy, struct client *client)
+ {
++    struct client *c;
++
+     if (client->secure.pending.queued)
+ 	return;
+ 
+@@ -47,13 +63,19 @@ maybe_flush_ssl(struct proxy *proxy, struct client *client)
+ 	client->secure.pending.writes_count > 0)
+ 	return;
+ 
+-    client->secure.pending.next = proxy->pending_writes;
+-    if (client->secure.pending.next != NULL)
+-	client->secure.pending.next->secure.pending.prev = &client->secure.pending.next;
+-    client->secure.pending.prev = &proxy->pending_writes;
++    uv_mutex_lock(&proxy->mutex);
++    if (proxy->pending_writes == NULL) {
++    	proxy->pending_writes = client;
++	client->secure.pending.prev = client->secure.pending.next = NULL;
++    }
++    else {
++    	for (c=proxy->pending_writes; c->secure.pending.next; c = c->secure.pending.next)
++	    ; /**/
++	c->secure.pending.next = client;
++	client->secure.pending.prev = c;
++    }
+     client->secure.pending.queued = 1;
+-
+-    proxy->pending_writes = client;
++    uv_mutex_unlock(&proxy->mutex);
+ }
+ 
+ static void
+@@ -135,10 +157,12 @@ flush_ssl_buffer(struct client *client)
+ void
+ flush_secure_module(struct proxy *proxy)
+ {
+-    struct client	*client, **head = &proxy->pending_writes;
++    struct client	*client, **head;
+     size_t		i, used;
+     int			sts;
+ 
++    uv_mutex_lock(&proxy->mutex);
++    head = &proxy->pending_writes;
+     while ((client = *head) != NULL) {
+ 	flush_ssl_buffer(client);
+ 
+@@ -188,6 +212,7 @@ flush_secure_module(struct proxy *proxy)
+ 		    sizeof(uv_buf_t) * client->secure.pending.writes_count);
+ 	}
+     }
++    uv_mutex_unlock(&proxy->mutex);
+ }
+ 
+ void
+diff --git a/src/pmproxy/src/server.c b/src/pmproxy/src/server.c
+index 612d3613b..b5c5d84de 100644
+--- a/src/pmproxy/src/server.c
++++ b/src/pmproxy/src/server.c
+@@ -149,6 +149,7 @@ server_init(int portcount, const char *localpath)
+ 			pmGetProgname());
+ 	return NULL;
+     }
++    uv_mutex_init(&proxy->mutex);
+ 
+     count = portcount + (*localpath ? 1 : 0);
+     if (count) {
+@@ -251,6 +252,7 @@ void
+ client_put(struct client *client)
+ {
+     unsigned int	refcount;
++    struct proxy	*proxy = client->proxy;
+ 
+     uv_mutex_lock(&client->mutex);
+     assert(client->refcount);
+@@ -259,9 +261,11 @@ client_put(struct client *client)
+ 
+     if (refcount == 0) {
+ 	/* remove client from the doubly-linked list */
++	uv_mutex_lock(&proxy->mutex);
+ 	if (client->next != NULL)
+ 	    client->next->prev = client->prev;
+ 	*client->prev = client->next;
++	uv_mutex_unlock(&proxy->mutex);
+ 
+ 	if (client->protocol & STREAM_PCP)
+ 	    on_pcp_client_close(client);
+@@ -514,10 +518,12 @@ on_client_connection(uv_stream_t *stream, int status)
+     client->proxy = proxy;
+ 
+     /* insert client into doubly-linked list at the head */
++    uv_mutex_lock(&proxy->mutex);
+     if ((client->next = proxy->first) != NULL)
+ 	proxy->first->prev = &client->next;
+     proxy->first = client;
+     client->prev = &proxy->first;
++    uv_mutex_unlock(&proxy->mutex);
+ 
+     status = uv_read_start((uv_stream_t *)&client->stream.u.tcp,
+ 			    on_buffer_alloc, on_client_read);
+diff --git a/src/pmproxy/src/server.h b/src/pmproxy/src/server.h
+index f0b7a5f68..f93daeff4 100644
+--- a/src/pmproxy/src/server.h
++++ b/src/pmproxy/src/server.h
+@@ -118,7 +118,7 @@ typedef struct secure_client {
+     BIO			*write;
+     struct {
+ 	struct client	*next;
+-	struct client	**prev;
++	struct client	*prev;
+ 	unsigned int	queued;
+ 	size_t		writes_count;
+ 	uv_buf_t	*writes_buffer;
+@@ -166,6 +166,7 @@ typedef struct proxy {
+     struct dict		*config;	/* configuration dictionary */
+     uv_loop_t		*events;	/* global, async event loop */
+     uv_callback_t	write_callbacks;
++    uv_mutex_t		mutex;		/* protects client lists and pending writes */
+ } proxy;
+ 
+ extern void proxylog(pmLogLevel, sds, void *);
diff --git a/SOURCES/redhat-bugzilla-1974266.patch b/SOURCES/redhat-bugzilla-1974266.patch
new file mode 100644
index 0000000..06ced55
--- /dev/null
+++ b/SOURCES/redhat-bugzilla-1974266.patch
@@ -0,0 +1,2478 @@
+diff -Naurp pcp-5.3.1.orig/qa/1072 pcp-5.3.1/qa/1072
+--- pcp-5.3.1.orig/qa/1072	2021-02-17 15:27:41.000000000 +1100
++++ pcp-5.3.1/qa/1072	2021-06-24 17:22:58.945372343 +1000
+@@ -88,6 +88,12 @@ pmrep -u -s 5 -o archive -F $tmp.new_arc
+ pmrep -u -a $tmp.new_archive4 -z hinv.machine mem.util.used
+ pmdumplog -z -dim $tmp.new_archive4
+ 
++echo "=== pmrep archive creation with scaled values"
++pmrep -u -s 5 -o archive -F $tmp.new_archive5 -z $log2 -i sda,sdc disk.dev.write_bytes,,,MB | _pid_filter
++# Using -r to display the unit in the archive
++pmrep -u -a $tmp.new_archive5 -z -r disk.dev.write_bytes
++pmdumplog -z -dim $tmp.new_archive5
++
+ rm -f $tmp.a1-out* $tmp.a2-out* $tmp.new_archive*
+ 
+ # success, all done
+diff -Naurp pcp-5.3.1.orig/qa/1072.out pcp-5.3.1/qa/1072.out
+--- pcp-5.3.1.orig/qa/1072.out	2021-02-17 15:27:41.000000000 +1100
++++ pcp-5.3.1/qa/1072.out	2021-06-24 17:22:58.945372343 +1000
+@@ -93,4 +93,53 @@ Instance Domains in the Log ...
+ 
+ 14:39:17.882326 1 metric
+     60.1.1 (mem.util.used): value 13573800
++=== pmrep archive creation with scaled values
++Recording 1 metrics to TMP.new_archive5:
++5 samples(s) with 1.0 sec interval ~ 4 sec duration.
++  d.d.write_bytes  d.d.write_bytes
++              sda              sdc
++            Kbyte            Kbyte
++        369846691        948239088
++        369847163        948239160
++        369847575        948239236
++        369848903        948239408
++        369849315        948239540
++Note: timezone set to local timezone of host "billing02" from archive
++
++
++Descriptions for Metrics in the Log ...
++PMID: 60.0.39 (disk.dev.write_bytes)
++    Data Type: 32-bit unsigned int  InDom: 60.1 0xf000001
++    Semantics: counter  Units: Kbyte
++
++Instance Domains in the Log ...
++InDom: 60.1
++00:28:01.923022 2 instances
++   0 or "sda"
++   2 or "sdc"
++
++00:28:01.923022 1 metric
++    60.0.39 (disk.dev.write_bytes):
++        inst [0 or "sda"] value 369846691
++        inst [2 or "sdc"] value 948239088
++
++00:29:01.925641 1 metric
++    60.0.39 (disk.dev.write_bytes):
++        inst [0 or "sda"] value 369847163
++        inst [2 or "sdc"] value 948239160
++
++00:30:01.923324 1 metric
++    60.0.39 (disk.dev.write_bytes):
++        inst [0 or "sda"] value 369847575
++        inst [2 or "sdc"] value 948239236
++
++00:31:01.922091 1 metric
++    60.0.39 (disk.dev.write_bytes):
++        inst [0 or "sda"] value 369848903
++        inst [2 or "sdc"] value 948239408
++
++00:32:01.922742 1 metric
++    60.0.39 (disk.dev.write_bytes):
++        inst [0 or "sda"] value 369849315
++        inst [2 or "sdc"] value 948239540
+ == done
+diff -Naurp pcp-5.3.1.orig/qa/1627 pcp-5.3.1/qa/1627
+--- pcp-5.3.1.orig/qa/1627	1970-01-01 10:00:00.000000000 +1000
++++ pcp-5.3.1/qa/1627	2021-06-24 17:22:58.942372394 +1000
+@@ -0,0 +1,62 @@
++#!/bin/sh
++# PCP QA Test No. 1627
++# Exercise LOGIMPORT PM_ERR_CONV error handling condition
++# https://github.com/performancecopilot/pcp/issues/1327
++#
++# Copyright (c) 2021 Red Hat.  All Rights Reserved.
++#
++
++if [ $# -eq 0 ]
++then
++    seq=`basename $0`
++    echo "QA output created by $seq"
++else
++    # use $seq from caller, unless not set
++    [ -n "$seq" ] || seq=`basename $0`
++    echo "QA output created by `basename $0` $*"
++fi
++
++# get standard environment, filters and checks
++. ./common.product
++. ./common.filter
++. ./common.check
++
++do_valgrind=false
++if [ "$1" = "--valgrind" ]
++then
++    _check_valgrind
++    do_valgrind=true
++fi
++
++_cleanup()
++{
++    cd $here
++    $sudo rm -rf $tmp $tmp.*
++}
++
++status=0	# success is the default!
++$sudo rm -rf $tmp $tmp.* $seq.full
++trap "_cleanup; exit \$status" 0 1 2 3 15
++
++_filter()
++{
++    sed \
++	-e "s,$tmp.log,TMPLOG,g" \
++    # end
++}
++
++# real QA test starts here
++rm -f $tmp.log.*
++
++if $do_valgrind
++then
++    _run_valgrind ./src/check_pmi_errconv $tmp.log
++else
++    ./src/check_pmi_errconv $tmp.log
++fi \
++| _filter
++
++PCP_DERIVED_CONFIG="" TZ=UTC pminfo -fd -a $tmp.log
++
++# success, all done
++exit
+diff -Naurp pcp-5.3.1.orig/qa/1627.out pcp-5.3.1/qa/1627.out
+--- pcp-5.3.1.orig/qa/1627.out	1970-01-01 10:00:00.000000000 +1000
++++ pcp-5.3.1/qa/1627.out	2021-06-24 17:22:58.945372343 +1000
+@@ -0,0 +1,18 @@
++QA output created by 1627
++pmiPutValue: inst 0: Impossible value or scale conversion
++pmiPutValue: inst 1: Impossible value or scale conversion
++
++my.metric.int
++    Data Type: 32-bit int  InDom: 245.0 0x3d400000
++    Semantics: instant  Units: none
++Error: Impossible value or scale conversion
++
++event.flags
++    Data Type: 32-bit unsigned int  InDom: PM_INDOM_NULL 0xffffffff
++    Semantics: discrete  Units: none
++No value(s) available!
++
++event.missed
++    Data Type: 32-bit unsigned int  InDom: PM_INDOM_NULL 0xffffffff
++    Semantics: discrete  Units: none
++No value(s) available!
+diff -Naurp pcp-5.3.1.orig/qa/1628 pcp-5.3.1/qa/1628
+--- pcp-5.3.1.orig/qa/1628	1970-01-01 10:00:00.000000000 +1000
++++ pcp-5.3.1/qa/1628	2021-06-24 17:22:58.943372377 +1000
+@@ -0,0 +1,40 @@
++#!/bin/sh
++# PCP QA Test No. 1628
++# Exercise LOGIMPORT PM_ERR_CONV error handling condition
++# https://github.com/performancecopilot/pcp/issues/1327
++# valgrind-enabled variant.
++#
++# Copyright (c) 2021 Red Hat.  All Rights Reserved.
++#
++
++seq=`basename $0`
++echo "QA output created by $seq"
++
++# get standard environment, filters and checks
++. ./common.product
++. ./common.filter
++. ./common.check
++
++_check_valgrind
++
++_cleanup()
++{
++    cd $here
++    $sudo rm -rf $tmp $tmp.*
++}
++
++status=0	# success is the default!
++$sudo rm -rf $tmp $tmp.* $seq.full
++trap "_cleanup; exit \$status" 0 1 2 3 15
++
++# real QA test starts here
++export seq
++./1627 --valgrind \
++| $PCP_AWK_PROG '
++skip == 1 && $1 == "==="       { skip = 0 }
++/^=== std err ===/             { skip = 1 }
++skip == 0              { print }
++skip == 1              { print >>"'$here/$seq.full'" }'
++
++# success, all done
++exit
+diff -Naurp pcp-5.3.1.orig/qa/1628.out pcp-5.3.1/qa/1628.out
+--- pcp-5.3.1.orig/qa/1628.out	1970-01-01 10:00:00.000000000 +1000
++++ pcp-5.3.1/qa/1628.out	2021-06-24 17:22:58.945372343 +1000
+@@ -0,0 +1,25 @@
++QA output created by 1628
++QA output created by 1627 --valgrind
++=== std out ===
++=== filtered valgrind report ===
++Memcheck, a memory error detector
++Command: ./src/check_pmi_errconv TMPLOG
++LEAK SUMMARY:
++definitely lost: 0 bytes in 0 blocks
++indirectly lost: 0 bytes in 0 blocks
++ERROR SUMMARY: 0 errors from 0 contexts ...
++
++my.metric.int
++    Data Type: 32-bit int  InDom: 245.0 0x3d400000
++    Semantics: instant  Units: none
++Error: Impossible value or scale conversion
++
++event.flags
++    Data Type: 32-bit unsigned int  InDom: PM_INDOM_NULL 0xffffffff
++    Semantics: discrete  Units: none
++No value(s) available!
++
++event.missed
++    Data Type: 32-bit unsigned int  InDom: PM_INDOM_NULL 0xffffffff
++    Semantics: discrete  Units: none
++No value(s) available!
+diff -Naurp pcp-5.3.1.orig/qa/group pcp-5.3.1/qa/group
+--- pcp-5.3.1.orig/qa/group	2021-06-02 13:30:30.000000000 +1000
++++ pcp-5.3.1/qa/group	2021-06-24 17:22:58.943372377 +1000
+@@ -1849,6 +1849,8 @@ x11
+ 1613 pmda.linux kernel local
+ 1622 selinux local
+ 1623 libpcp_import collectl local
++1627 libpcp_import local
++1628 libpcp_import valgrind local
+ 1634 pmda.sockets local
+ 1644 pmda.perfevent local
+ 1660 libpcp labels local
+diff -Naurp pcp-5.3.1.orig/qa/group.orig pcp-5.3.1/qa/group.orig
+--- pcp-5.3.1.orig/qa/group.orig	1970-01-01 10:00:00.000000000 +1000
++++ pcp-5.3.1/qa/group.orig	2021-06-02 13:30:30.000000000 +1000
+@@ -0,0 +1,1929 @@
++## QA groups control
++##
++## define groups
++##
++## Do not start group name with a digit, expect alphabetic
++##
++## Last comment starting with a single # before a group name is the
++## one-line summary that "new" will report when asked to list groups
++##
++## Comments starting with a ## (or #<anything_other_than_whitesspace>
++## are ignored for the purposes of one-line summaries.
++
++# catch-all
++other
++
++# sanity check ... quick coverage of most functionality
++## Expectation is to run in 3-5 minutes, and must pass 100%
++## in the sense of no failures; _notrun is OK.
++## NOTE: used by testing orgs beyond developers, must pass!
++sanity
++
++# not_in_ci ... tests that will not work in the fully automated
++# CI environment (github actions this week), where the following
++# analysis and protocols have been followed:
++# (a) the test has repeatedly failed on most hosts in the daily CI QA
++#     run
++# (b) the test is not a candidates for some _notrun medicine
++# (c) failures have been analyzed and it has been determined that the
++#     failure is an artifact of the CI setup (not the code and not
++#     the QA test)
++# (d) the test is passing universally elsewhere outside CI
++# and the test is annotated with a comment like
++# # :not_in_ci:
++# explaining the reason for assigning this one to the not_in_ci
++# group (./check-group not_in_ci can be used to check for the
++# presence of the explanation in the test)
++not_in_ci
++
++# local check ... runs on localhost alone, no remotes used
++## NOTE: used by testing orgs beyond developers, do not add
++## tests here that are known to fail - goal is for 100% pass
++## rate, but due to test volume and chaos theory, some tests
++## do fail sometimes, on some platforms, during a full moon.
++local
++
++# packaging verification
++## Suitable for standalone use, particularly immediately after
++## installation to check.
++verify
++
++# flakey checks ... known to have intermittent races/hangs.
++## NOTE: some threading race conditions (possibly in tests),
++## prevent 100% pass rate being achieved here.  Goal is to
++## get this group devoid of any tests.
++flakey
++
++# tests requiring creation/manipulation of very large files
++# (can be extremely slow on certain devices), or otherwise
++# known to take a long time (where long is approx > 3mins).
++slow
++
++# platform/kernel PMDA sanity checks ... tests that use the
++# common platform metrics, kernel.*, disk.*, hinv.*, mem.*
++kernel
++
++## specific apps
++##
++# pcp collector infrastructure
++pmcd
++pmproxy
++pmcpp
++# strip chart app
++pmchart
++# 3D scene app
++pmview
++# time control
++pmtime
++# dialog
++pmquery
++# pmdumptext app
++pmdumptext
++# pmdumplog app
++pmdumplog
++# pmloglabel app
++pmloglabel
++# pmlogger app (not control scripts)
++pmlogger
++# pmie app, sample rules and friends
++pmie
++# dbpmda app
++dbpmda
++# pmlc app and pmlc-pmlogger IPC
++pmlc
++# pmfind app
++pmfind
++# folio handling (mkaf and pmafm), also record mode
++folio
++# pmval app
++pmval
++# pmstat app
++pmstat
++# pminfo app
++pminfo
++# pmprobe app
++pmprobe
++# pmrep app
++pmrep
++# pmpost
++pmpost
++# pmdate
++pmdate
++# pcp and sub-commands
++pcp
++# pmclient demo apps
++pmclient
++
++# general PDU encode/decode
++pdu
++
++# PMNS related functions/programs
++pmns
++
++# PCP version compatability
++compat
++
++# generic libpcp services (not pdu, not context, not archive)
++libpcp
++
++# fetch-specific, optfetch, fetchgroup
++fetch
++
++# archive support in libpcp, includes interp.c
++archive
++
++# multi-archive support in libpcp, includes interp.c
++multi-archive
++
++# xz decompression support in libpcp
++decompress-xz
++
++# getopt support - libpcp, pmgetopt, python
++getopt
++
++# pmlogger_* scripts (but not pmlogger)
++logutil
++
++# find-filter (used in pmlogger_daily)
++find-filter
++
++# pmie_* scripts (but not pmie)
++pmieutil
++
++# NSS, SASL, other authentication
++secure
++
++# Containers functionality
++containers
++
++# log extraction app
++pmlogextract
++# log reduction app
++pmlogreduce
++# log rotation script
++#retired# pmnewlog
++# log move script
++pmlogmv
++# log summary app
++pmlogsummary
++# log comparison app
++pmdiff
++# pmlogger configuration app
++pmlogconf
++
++# general context manipulations, includes profile cacheing
++context
++
++# indom specific services
++indom
++
++# PM_CONTEXT_LOCAL
++context_local
++
++# PCP on different platforms
++interop
++
++# memory leaks, assorted
++mem_leak
++
++# general pmdas, but includes libpcp_pmda
++pmda
++
++# pmda installation scripts and procedures
++pmda.install
++
++## Assorted PMDAs
++pmda.activemq
++pmda.apache
++pmda.bash
++pmda.bcc
++pmda.bind2
++pmda.bpftrace
++pmda.cifs
++pmda.cisco
++pmda.dm
++pmda.docker
++pmda.ds389
++pmda.elasticsearch
++pmda.environ
++pmda.gfs2
++pmda.gluster
++pmda.gpfs
++pmda.hacluster
++pmda.haproxy
++pmda.hotproc
++pmda.jbd2
++pmda.json
++pmda.kvm
++pmda.libvirt
++pmda.lio
++pmda.lmsensors
++pmda.logger
++pmda.lustre
++pmda.mailq
++pmda.memcache
++pmda.mic
++pmda.mmv
++pmda.mounts
++pmda.mpi
++pmda.mysql
++pmda.named
++pmda.netcheck
++pmda.netfilter
++pmda.news
++pmda.nfsclient
++pmda.nginx
++pmda.nutcracker
++pmda.nvidia
++pmda.openmetrics
++pmda.oracle
++pmda.perfevent
++pmda.pipe
++pmda.pmcd
++pmda.pmproxy
++pmda.podman
++pmda.postfix
++pmda.postgresql
++pmda.proc
++pmda.redis
++pmda.root
++pmda.rpm		# note this group has been retired
++pmda.rsyslog
++pmda.sample
++pmda.sendmail
++pmda.shping
++pmda.simple
++pmda.slurm
++pmda.smart
++pmda.sockets
++pmda.summary
++pmda.systemd
++pmda.trace
++pmda.trivial
++pmda.txmon
++pmda.unbound
++pmda.weblog
++pmda.xfs
++pmda.zfs
++pmda.zswap
++
++# tools which use PCP_COUNTER_WRAP
++wrap
++
++# pmstore command and pmStore() libpcp routine
++pmstore
++
++# metadata labels and pm*Labels() libpcp routines
++labels
++
++# trace library
++trace
++
++# Linux platform PMDA
++pmda.linux
++
++# metrics class tests
++libpcp_qmc
++
++# shared memory transport for PMDAs
++libpcp_mmv
++
++# libpcp_import - pmi* routines for log importing
++libpcp_import
++
++# pmsocks
++pmsocks
++
++# newhelp, chkhelp and associated library support
++help
++
++# pmgadgets
++pmgadgets
++
++# tests that use purify
++purify
++
++# tests that use valgrind
++valgrind
++
++# pmcd_wait - wait for pmcd to be ready for connections
++pmcd_wait
++
++# pmimport and plugins
++pmimport
++
++# pmieconf - app, pconf and lconf
++pmieconf
++
++# os testing - eagan
++ostest
++
++# mpi library
++libpcp_mpi
++
++# mpi read library
++libpcp_mpiread
++
++# derived metrics
++derive
++
++# event records and pmevent
++event
++
++# multi-threading and thread-safe exercises
++threads
++
++# perl bits
++perl
++
++# python modules and client tools
++python
++
++# fault injection (in libpcp)
++fault
++
++# log rewriting app
++pmlogrewrite
++
++# log checking
++pmlogcheck
++
++# uses avahi
++avahi
++
++# zabbix exporting
++zbxpcp
++
++# pcp system commands
++atop
++dstat
++free
++pidstat
++iostat
++tapestat
++ipcs
++mpstat
++
++# full test search
++pmsearch
++
++# scalable queries
++pmseries
++
++# Uses Linux kernel cgroups
++cgroups
++
++# Timezone services in libpcp
++timezone
++
++# JSON parsing and metric extraction in libpcp_web
++libpcp_web
++
++# Old PCP versions interoperability
++oldversion
++
++# Shell command completion
++bash
++zsh
++
++# collectl2pcp
++collectl
++
++# pmlogsize
++pmlogsize
++
++# pmdbg
++pmdbg
++
++# pmlogctl
++pmlogctl
++
++# pmiectl
++pmiectl
++
++# pcp2... pcp2xxx is generic
++pcp2xxx
++pcp2elasticsearch
++pcp2graphite
++pcp2influxdb
++pcp2json
++pcp2spark
++pcp2xlsx
++pcp2xml
++pcp2zabbix
++
++# ...2pcp
++ganglia2pcp
++
++# man pages
++man
++
++# selinux stuff
++selinux
++
++# retired tools
++pmmgr			# note this group has been retired
++pmwebd			# note this group has been retired
++
++# Bad tests with unacceptable cross-platform behaviour, these ones
++# will NOT be run in the QA Farm
++BAD
++
++# these test don't work in containers (yet)
++not_in_container
++
++# need an accessible X11 server
++x11
++
++# test-group association ... one line per test
++# add :retired or :reserved as a tag immediately after the test number
++# to keep the test number allocated, but prevent the test from being run
++
++# ... use sort -n from here on down to tidy up this mess
++#
++000 other pmcd local ostest
++001 pdu local ostest sanity
++002 pdu pmcd local ostest sanity
++003 pdu pmcd mem_leak local ostest kernel
++004 context local ostest sanity
++005 context archive local ostest sanity
++006 libpcp local ostest
++007 fetch local ostest sanity
++008 pmda kernel ostest local not_in_ci
++009:retired kernel local ostest
++010 libpcp local ostest sanity
++011 mem_leak local ostest
++012 archive local
++013 archive pmdumplog local ostest
++014 archive local ostest pmdumplog
++015 pdu local ostest pmstore
++016 archive indom local ostest pmdumplog
++017 context local ostest
++018 pmcd local ostest
++019 context_local local ostest kernel
++020 context_local local ostest kernel
++021 other local ostest
++022 context_local pmda pmda.proc local ostest
++023 pmcd local pmprobe ostest pmstore kernel
++024 context context_local ostest remote
++025 context local ostest
++026 other help local ostest sanity libpcp
++027 libpcp local ostest sanity
++028 pmns local ostest
++029 pmns local ostest pmdumplog pmda.sample
++030 pdu pmcd pmda context_local local ostest pmstore
++031 pmns local sanity
++032 pmlc local ostest pmlogger
++033 kernel local ostest
++034 archive local ostest sanity pmdumplog
++035 pmrep local python kernel
++036 libpcp local
++037 archive local ostest
++038 pmlogger local pmdumplog kernel
++039 pmlogger archive local ostest pmdumplog
++040 pmlogger mem_leak local ostest
++041 pmcd local ostest
++042 pmcd local ostest containers pmda.linux pmda.proc pmda.root
++043 libpcp fetch local ostest
++044 fetch pmval local ostest
++045 libpcp pmda local ostest pmstore
++046 archive pmlogger pmdumplog local ostest
++047 pmcd local ostest containers pmda.linux pmda.root
++048 archive local ostest sanity
++049 archive local ostest pmdumplog
++050 archive local ostest
++051 pmcd ostest remote
++052 pmns local ostest
++053 local pmprobe ostest pmlogger pmclient pmdumplog python kernel
++054 pmlogger archive ostest remote pmdumplog kernel
++055 pmie ostest local sanity
++056 local pmprobe ostest pmlogger pmclient python pmdumplog kernel
++057 pmns local ostest
++058 pmval local ostest
++059 archive local ostest sanity pmdumplog
++060 archive context local ostest
++061 pmlogger local ostest pmdumplog
++062 pmcd local ostest
++063 fetch local ostest
++064 pidstat local python pcp
++065 libpcp local ostest pmstore
++066 pmcd ostest remote folio
++067 pmcd local ostest folio
++068 context local ostest sanity folio
++069 pmcd pmval remote pmstore folio
++070 other ostest remote
++071 context_local local ostest
++072 pmlogger ostest remote pmdumplog kernel
++073 pmclient local pmprobe python kernel
++074 pmda pmda.cisco pmda.pmcd local ostest sanity kernel
++075 pmval pmstore ostest remote
++076 pmda.pmcd local ostest
++077 libpcp ostest remote timezone
++078 pmdumplog local ostest
++079 libpcp archive local ostest pmclient
++080 libpcp pmval local sanity kernel
++081 indom archive pmns remote pmdumplog kernel
++082 pmns local ostest
++083 pmlc pmlogger compat remote kernel
++084 other local ostest
++085 pmlogger local ostest sanity
++086 libpcp ostest remote timezone
++087 archive local ostest sanity
++088 archive #500237 pmval local ostest
++089 archive pmval local ostest
++090 archive local ostest
++091 archive local ostest sanity
++092 archive local ostest
++093 archive local ostest
++094 pmval archive local ostest
++095 archive local ostest
++096 pmda.proc local
++097 archive local ostest
++098 pmlc pmlogger other local pmdumplog
++099 pmlc local
++100 pmlc pmlogger local pmdumplog
++101 pmlc pmlogger remote pmdumplog
++102 pmlc local pmlogger
++103 pmlc pmlogger local pmdumplog
++104 pmlc pmlogger local pmdumplog
++105 pmlc pmlogger local pmdumplog
++106 pmlc pmlogger local pmdumplog
++107 pmlc local sanity
++108 pmda.cisco pmda.sample local
++109 pmclient local pmprobe python kernel
++110 pmda.simple pmda.proc local pmda.install
++111 pmda.proc pmval local
++112 pmns local sanity
++113 kernel local
++114 pmda.linux local
++115 pmie remote pmieutil
++116 other pmie pmval remote pmlc
++117 kernel local
++118 pmie local kernel
++119 logutil local #877570
++120 kernel local kernel
++121 pmlogconf #893249 local kernel
++122 trace local #893884 remote pmda.trace
++123 libpcp local
++124 pmie local #870661 kernel
++125 pmval archive kernel
++126:retired pmda.linux local
++127 pmlogreduce local sanity pmdumplog
++128 kernel pminfo local
++129 pmlogreduce local pmval kernel
++130 kernel local
++131 libpcp remote
++132 pmlogger local pmlc
++133 pmlc pmlogger local pmdumplog
++134 pmlc pmlogger local pmdumplog
++135 pmlc archive local pmdumplog
++136 pmlogger local pmdumplog pmloglabel pmlc
++137 dbpmda local pmda.simple sanity
++138 pmns local
++139 pmlc local pmda.sample
++140 pmns local
++141 archive context local
++142 pmlogreduce local pmdumplog
++143 pmns local
++144 pmlogreduce local pmval kernel
++145 pmns local
++146 pmns libpcp local sanity
++147 dbpmda local
++148:retired kernel local
++149 kernel local kernel
++150 pmlogreduce local pmval kernel
++151 logutil local pmlogextract
++152 pmda.pmcd pmval local
++153 folio local sanity
++154 pmda.cisco help local sanity
++155 pmcd pmstore pmda.sample local sanity
++156 pmda.sample pmda.proc local pmcd_wait pmda.install
++157 pmlogger local
++158 pmval pmie local kernel
++159 pmda.cisco local pmda.install pmstore pmpost
++160 libpcp local
++161 pmlogger local
++162:retired pmda pmda.proc local pmda.shping pmda.install
++163 archive local
++164:retired local pmval pmdumplog
++165 pmval local kernel
++166 pmlogreduce local pmval pmdumplog archive
++167 pmda.pmcd pmval local pmstore
++168 pmlogextract #933456 local pmstore pmdumplog
++169 pmcd local pmstore
++170 other local
++171 archive local pmdumplog
++172 pmcd pmlc local folio
++173 archive local pmdumplog
++174 dbpmda local
++175 pmval local
++176 libpcp pmval local
++177 archive pmval local pmdumplog pmlc
++178 pmval local pmlogextract sanity pmdumplog pmlogger
++179 pmval pmlc local pmdumplog kernel
++180 archive pmval local
++181 pmval archive pmval local
++182 pmlc pmlogger local
++183:retired local pmlc pmnewlog
++184:retired logutil remote sanity pmdumplog pmnewlog
++185:retired local pmnewlog
++186 local pmlogextract
++187 pmcd pmlogger #327288 remote
++188 libpcp local
++189 pmie local kernel
++190 libpcp local
++191 pmie local kernel
++192 pdu local folio
++193 libpcp pmcd #935490 local pdu
++194 libpcp pmcd #935490 local
++195 archive local pmdumplog
++196 pmcd remote
++197 context local
++198 pmda context #934332 local
++199 pmda.trivial pmda.proc local pmda.install
++200 context local
++201 pmda local sanity
++202 pmval local pmlogextract pmdumplog
++203 archive pmval local pmlogextract pmdumplog
++204 pmlogger local pmdumplog kernel
++205 pdu local
++206 archive pmval local kernel
++207 pmns local sanity
++208 pmns local sanity
++209 pmval local kernel
++210 pmns local pmval pmie sanity pmdumplog
++211 pmns local pmval pmie pmdumplog
++212:retired pmda pmda.cisco local
++213 dbpmda pmns local pmda.sample pmda.mmv sanity
++214 pmlogextract local pmdumplog timezone
++215 other pmsocks pmval remote pmdumplog
++216 pmda.linux local
++217 folio local
++218 archive local pmlogextract pmdumplog
++219 pmdbg local
++220 pmlogger local folio
++221 pmlogger local
++222 other local
++223:retired pmns local
++224 pmcd local
++225 derive local kernel
++226 dbpmda local
++227 folio local
++228 pmie local
++229 pmie local
++230 pmlogger pmlc local
++231 pmie #421411 local kernel
++232 libpcp local sanity kernel
++233 context_local local
++234 local pmdumplog pmlogsummary pmlogextract sanity
++235 pmns local
++236 pmns local
++237 pmns local
++238 pmns local
++239 pmns local kernel
++240 pmns local
++241 pmda.mmv local pmval perl
++242 pmlogger local kernel
++243 pmcd local pmprobe
++244 pmcd local pmprobe
++245 pmns local
++246 derive local valgrind
++247 derive local kernel
++248 pmlogger local pmdumplog
++249 derive local sanity
++250 pmns local
++251 archive pmval local pmdumplog
++252 pmlogger local pmdumplog
++253 derive local
++254 libpcp pmns local
++255 compat pmda #508731 #509091 pmda.proc help pmda.install local pmda.simple
++256 derive pmns local sanity pmda.sample
++257 libpcp pmns compat remote
++258 trace local pmda.install folio pmda.trace
++259 derive pmval local
++260 derive pmie local pmstore
++261 pmdumplog pmval local pmlogextract
++262 context_local pmie pmsocks remote pmstat kernel
++263 derive local sanity
++264 pmns local
++265 libpcp local
++266 #466346 patch2140 patch2141 local pmlogextract pmdumplog timezone
++267 libpcp local
++268 interop local
++269 wrap pmval local pmstore
++270 local pmdumplog kernel
++271 archive local pmdumplog
++272 pmcd pmval pmprobe remote pmstore
++273 libpcp local pmval pmstore pmda.sample kernel
++274 pmda help local pmda.install dbpmda
++275 derive local kernel
++276 pmie pmval indom local
++277 libpcp pdu interop local
++278 other help local sanity
++279 pmcd local folio
++280 pmlogger logutil local folio pmlc
++281 archive mem_leak #504616 local
++282 pmcd local pmprobe logutil pmlc folio
++283 context pmcd local
++284:retired  pdu local purify
++285 dbpmda local
++286 pmda.linux local pmval kernel
++287 pmlogreduce local pmval
++288 archive local
++289 libpcp fetch archive #505498 local
++290:retired  pmns local purify
++291 logutil local pmlogextract pmdumplog
++292 pmlogextract logutil pmval local
++293 pmstat #939275 local
++294 pmproxy local pmval pmie pmstat pmdumptext
++295 pmproxy local pmval pmstat pmie
++296 pmcd local
++297 pmproxy local
++298 pmie local kernel
++299 libpcp local sanity kernel
++300 pmcd local pmpost
++301 pmda pmcd pmlogger local
++302 pmlogextract local pmdumplog
++303 local pmlogextract pmdumplog
++304 pmlogger local
++305 pmgadgets local
++306 other local pmpost
++307 pmlc #936084 local pmie
++308 pmlc pmlogger #452417 remote pmdumplog pmda.proc
++309 libpcp pmcd pmda.linux pmda.simple local pmstore kernel
++310 pmie local kernel
++311:retired archive compat #509592 pminfo local pmdumplog
++312 pmie local
++313 pmval archive local pmdumplog kernel
++314 pmie local pmieutil pmstore
++315 pmie local pmieutil
++316 libpcp local
++317 pmlogsummary local pmlogcheck pmie pmval derive pmrep python kernel
++318 pmie local
++319 pmie local kernel
++320 local folio pmlogcheck pmclient
++321 pmie local
++322 pmlc pmlogger remote pmdumplog kernel
++323 pmda.shping pmda.proc local pmda.install
++324 pmda.txmon pmda.proc local pmda.install
++325 libpcp local pmquery x11
++326 pmlogger pmval libpcp pmcd local pmda.install pmdumplog timezone
++327 archive local pmdumplog pmloglabel timezone
++328 local pmlogextract pmdumplog
++329:retired archive mem_leak local purify
++330:retired archive mem_leak local purify
++331:retired archive mem_leak local purify
++332:retired archive mem_leak local purify
++333:retired archive mem_leak local purify
++334 derive local
++335 derive local pmval pmstore
++336 trace local pmda.install folio pmda.trace
++337 pmlogextract local pmval pmdumplog
++338 logutil pmlogextract local sanity
++339 pmie local kernel
++340 pmcd remote pmstore
++341 pmda local
++342 other remote
++343 pmlogreduce local pmdumplog
++344 context_local local pmval pmprobe
++345 pmns derive local sanity
++346 pmda.mailq local pmda.install
++347 pmda.news local pmda.install perl pmstore
++348 pmda.kvm local pmda.install
++349 pmda.summary local pmda.install
++350 pmda.simple pmda local
++351 derive local
++352 derive pmlogger local pmdumplog
++353 pmsocks remote
++354 folio local sanity pmlc
++355 trace local pmda.install pmda.trace
++356 derive local pmie
++357 other local
++358 pmie local pmstore
++359 pmcd pminfo sanity local
++360 pmie remote
++361 pmda.linux local cgroups
++362 pmlogconf local kernel
++363 local pmlogsummary
++364 pmlogconf local kernel
++365 pmcd remote pmlc kernel
++366:retired pmlogconf local
++367 pdu local trace
++368 pmlogconf local
++369 pmimport local sanity pmdumplog perl
++370 pmimport local derive pmdumplog perl pmval
++371 pmimport local pmdumplog perl
++372 pmimport local pmdumplog perl
++373 pmimport local perl pmdumplog
++374 pmlc pmlogger remote pmdumplog
++375 pmlc pmlogger remote pmdumplog
++376 trace local pmda.install pmda.trace
++377 other local
++378 pmie local kernel
++379 pmda.cisco local
++380 libpcp pmda pmda.sample local pmval pmprobe
++381 pmlc remote
++382 dbpmda pmda pmda.sample local
++383 pmda.cisco local flakey
++384 pmda.pmcd local
++385 libpcp pmda.sample pminfo pmprobe local event sanity pmstore
++386 pdu mem_leak valgrind local
++387 pmns mem_leak valgrind local
++388 archive mem_leak valgrind local
++389 pmlogger local pmdumplog
++390 pmda.proc local pmval
++391 archive mem_leak valgrind local
++392 pmns local
++393 archive mem_leak valgrind local
++394 archive mem_leak valgrind local flakey
++395 archive mem_leak valgrind local kernel
++396 pmval local kernel
++397 dbpmda libpcp local pdu event sanity
++398 pmcd local
++399 pmie local kernel
++400 pminfo mem_leak valgrind context_local libpcp local event
++401 libpcp pminfo local event sanity pmstore
++402 archive local pmprobe kernel
++403 pmprobe pminfo pmval #541380 local sanity kernel
++404 libpcp local event sanity
++405 libpcp mem_leak valgrind local event
++406 libpcp local event
++407 derive local event sanity pmstore
++408 pmda local #627395 help
++409 libpcp pminfo local event
++410 pmdumplog local event
++411 pmda.simple local pmda.install
++412 wrap archive libpcp pmval local pmdumplog timezone pmstore
++413 pmie local event
++414 libpcp local
++415 pmstore local event
++416 pmda.news dbpmda local sanity perl
++417 archive local pmdumplog
++418 pmdumplog local pmlogger
++419 pmdumplog local pmlogger kernel
++420 local pmdumplog
++421 trace local pmda.install pmda.trace
++422 libpcp local pmstore
++423 libpcp local
++424 local pmlogsummary
++425 wrap local pmlogsummary pmdumplog
++426 trace local pmstore pmda.trace
++427 pmcd #564017 local
++428 archive local pmval pmstore
++429 pmns local
++430 logutil local #553276 #568199
++431 derive local
++432 pmlogreduce local
++433 pmie local #573184 kernel
++434 pmval local
++435 archive local sanity pmdumplog
++436 archive local sanity pmdumplog
++437 archive local sanity
++438 archive local pmdumplog
++439 pmlc local
++440 pmlogger local pmdumplog
++441 pmlogger local
++442 pmlogextract local
++443 event local pmstore
++444 event local pmstore
++445 trace local pmda.trace
++446 trace local pmda.trace
++447 event local pmstore
++448 libpcp local
++449 threads local flakey pmns
++450 pmlogextract local #584487 pmval
++451 threads local
++452 pmda.linux local
++453 perl local sanity kernel
++454 pmcd local
++455 pmda.rsyslog local flakey pmda.install
++456 logutil local #591459 pmlogextract
++457 pmda.logger pmda.install event local
++458 pmda.logger pmda.install event local
++459 pmlogreduce local valgrind
++460 pmlogextract local #598265 pmdumplog
++461 pmda.logger pmda.install event local
++462 pmcd_wait local #589006 #581025
++463 pmns local pmcpp
++464 pmns local pmcpp
++465 pmdumplog local #625913
++466 pmlogger local #625913
++467 pmns pmdumptext local
++468 pmns pmdumptext local
++469 help local #626853 kernel
++470 threads local
++471 pmda local #621699
++472 threads local
++473 threads local
++474 threads local
++475 threads local
++476 fault local
++477 event fault local pmstore
++478 fault local
++479 archive pmdumplog local pmie pmval kernel
++480 archive fault local pmdumplog
++481 pmlogrewrite local kernel
++482 pmlogsummary local pmdumplog
++483 pmlogrewrite local kernel
++484 pmlogrewrite local pmdumplog
++485 pmlogrewrite local pmdumplog
++486 pmlogrewrite local pmdumplog kernel
++487 pmlogrewrite pmdumplog local pmval
++488 pmlogrewrite pmdumplog local
++489 pmda local
++490 pmlogrewrite mem_leak valgrind local pmdumplog kernel
++491 pmda local
++492 pmlogrewrite local pmdumplog
++493 pmlogrewrite local pmval
++494 pmlogrewrite pmdumplog local pmval kernel
++495 pmlogrewrite local pmlogextract pmdumplog kernel
++496 pmlogrewrite pmdumplog local
++497 pmlogconf local
++498 event pmda local
++499 pmlogrewrite local timezone pmdumplog kernel
++500:retired local #636417 pmnewlog
++501 pmie local kernel
++502 pmlogrewrite local pmdumplog kernel
++503 logutil pmlogrewrite local pmlogextract pmdumplog
++504 libpcp fault local
++505 pmlogrewrite local pmdumplog
++506 pmlogrewrite local slow
++507 pcp local kernel
++508 archive pmlogreduce local pmval kernel
++509 derive pmns local pmda.sample
++510 pmlogger pmlc local
++511 pmimport pmdumplog pmlogsummary perl local
++512 threads pminfo pmlogger pmlogextract pmdumplog dbpmda local fault
++513 libpcp pdu local valgrind
++514 pmie local
++515 pmie local pmstore
++516 pmie local kernel
++517 other local
++518 pcp local flakey pmie
++519 pmie remote
++520 pmie local kernel
++521 pmie local
++522 pmcd local
++523 pmie local
++524 libpcp pmlogger local pmdumplog
++525 pmda.summary pmie local
++526 pmimport local valgrind
++527 libpcp_import perl local timezone
++528 pmimport pmdumplog perl local
++529 pmie local pmdumplog
++530 logutil pmlogextract local
++531 dbpmda local pmda.sample
++532 logutil pmlogextract local pmdumplog
++533 dbpmda local pmda.sample
++534 pmie local
++535 pmie local pmprobe
++536 pmimport local iostat pmval pmprobe pmdumplog timezone collectl pcp python
++537 pmimport perl local
++538 pmie local pmstore
++539 pmpost local flakey
++540 libpcp valgrind fault local
++541 pmie #535080 local pmprobe
++542 pmdate #666344 local
++543 logutil remote pmlogextract
++544 pmimport local collectl pcp python
++545 pmsocks local
++546 pmcd local secure
++547 libpcp pmcd local python
++548 pmie local sanity
++549 pmie local
++550 libpcp pmcd local python
++551 libpcp pmcd local python kernel
++552 libpcp local
++553 dbpmda python pmda.gluster local
++554 pmie local kernel
++555 pmie local kernel
++556 pmie local kernel
++557 pmie local
++558 pmie local kernel
++559 pmlogsummary local
++560 pmda.simple local pmda.install
++561 libpcp python labels local sanity
++562 pmcd pmda.sample dbpmda pminfo labels libpcp local sanity
++563 pmcd pmda.pmcd pminfo labels libpcp local
++564 logutil local pmlogextract
++565 pmda.sendmail local pmda.install
++566 pmlogcheck local
++567 libpcp labels local sanity python
++568 pmcd pmda.sample pminfo labels libpcp local sanity
++569 pmprobe #679693 local sanity pmstore pmda.sample
++570:retired pmns #690735 local
++571 pmlogger local pmdumplog
++572 pmcd pmda local pmda.install pmda.sample pmda.simple pmda.trivial pmstore
++573 other remote pmdumplog
++574 libpcp pmns compat local sanity
++575 pmie local
++576 pcp2xml python pcp2xxx derive local
++577 pmlogger local
++578 pmcd local pmda.install pmval
++579 collectl local
++580 indom local ostest kernel
++581 pmie local kernel
++582 pmdumplog local
++583 pmie #698718 remote
++584:retired libpcp pmie local #698774 purify
++585 pmval pmprobe local pminfo kernel
++586 other local
++587 pmcd #754795 local pmda.install pmda.trivial
++588 libpcp threads local archive multi-archive kernel
++589 remote
++590 libpcp threads local archive multi-archive
++591 pminfo archive multi-archive decompress-xz local pmlogextract
++592 pmda.sample local pmstore
++593 pmlogger #779495 local pmstore
++594 pmda.sample #779246 #782029 local
++595 libpcp threads local archive multi-archive kernel
++596 pmlogextract archive local
++597 pmda.shping pmda.proc pmda.install local
++598 derive local
++599 pmie local
++600 libpcp local timezone
++601 trace pmda.install local pmda.trace
++602 trace pmda.install local pmda.trace
++603 trace pmda.install remote pmda.trace
++604 archive pmval pmlogextract pmdumplog local
++605 trace local pmda.trace
++606 python archive pmns iostat local pidstat pcp
++607 libpcp local
++608 pmpost local
++609 pmdumplog local
++610 libpcp local
++611 pmlogger pmdumplog local
++612 other local
++613 pmdumplog local kernel
++614 pmns local
++615 pmlogsize local
++616 pmlogsize local
++617 dbpmda help local
++618 pmlogsize local
++619 pmlogsize local
++620 pmlogsize valgrind local
++621 pmlogsize local
++622 pmie remote
++623 logutil local
++624 pmlogrewrite pmdumplog decompress-xz local kernel
++625 libpcp getopt pmval local kernel
++626 logutil local
++627 pmlogcheck decompress-xz local
++628 pmda local pmda.simple
++629 pmlogmv pmlogcheck local
++630 other local
++631:retired pmlogrewrite
++632 libpcp pmlogrewrite local
++633 pmlogger local
++634 kernel local pmval timezone kernel
++635 pmda.linux kernel remote
++636 libpcp local
++637 other pmlogmv pmlogrewrite pmdumplog local
++638 pmns local
++639 pmns local
++640 pmpost local
++641 logutil pmdumplog local pmlogrewrite pmlogmv
++642 pmda.trivial pmns local pmda.simple pmda.sample pmda.sendmail trace pmda.trace
++643 pmda.trivial pmns local
++644 pmns local
++645 pmlogger local kernel
++646 pmda.mmv local sanity
++647 pmda.mmv local
++648 pmda.mmv local
++649 pmda.mmv local
++650 pmlogger local pmdumplog
++651 pmproxy local
++652 pmda.systemd event flakey
++653 libpcp local
++654 pmda.gfs2 local
++655 pmda.gfs2 local pmstore
++656 pmda.cifs local valgrind
++657 pmda.dm local
++658 logutil local pmlogrewrite pmlogmv
++659 pmlogreduce local
++660:retired pmwebd local
++661:retired pmwebd local python kernel
++662 pmproxy pmda.sample local python pmda.sample
++663:retired pmwebd local python
++664 logutil local pmlogrewrite pmlogmv
++665 pmda.linux local
++666:retired pmmgr local slow valgrind pmrep python pmlogrewrite
++667 pcp2graphite python pcp2xxx local
++668:retired pmmgr local containers pmdumplog
++669:retired pmmgr local pmlogcheck
++670 libpcp local
++671 folio local pmlogrewrite pmlogmv
++672 valgrind libpcp pmval local
++673 pmdumplog local decompress-xz
++674 pcp local
++675 pmlogrewrite local logutil kernel
++676 logutil pmlogrewrite local
++677 pmprobe archive multi-archive decompress-xz local pmlogextract
++678 logutil pmlogrewrite local
++679 logutil local pmlogrewrite pmlogmv
++680 libpcp local
++681 valgrind libpcp local
++682 libpcp_mmv labels local valgrind
++683 libpcp_mmv labels local
++684 pmstat archive multi-archive decompress-xz local pmlogextract
++685 pmns local
++686 logutil local
++687 pmlogger local man
++688 derive local
++689 pmclient archive multi-archive decompress-xz local sanity pmlogextract python
++690 derive local
++691 derive local
++692 pmie pmda.sample local
++693 pmie pmda.sample local
++694 pmie valgrind local
++695 pmda.trivial perl local
++696 pmda.trivial python local
++697 pmie valgrind local kernel
++698 pmie valgrind local
++699 pmlogrewrite local
++700 other local
++701 pmlogcheck local
++702 python libpcp local sanity
++703 pmda.weblog local
++704 pmda.mmv python libpcp_mmv local
++705 libpcp local
++706 libpcp local
++707 python libpcp local sanity
++708 python pmimport local
++709:retired pmcollect
++710 python pmimport local pmdumplog
++711 pmimport pmlogsummary perl local
++712 context libpcp pmcd secure local kernel
++713 context libpcp pmproxy secure local
++714 context libpcp pmcd secure local kernel
++715 pmda.simple perl
++716 dbpmda pmda.simple perl
++717 pmda.simple python
++718 dbpmda pmda.simple python
++719 libpcp local valgrind
++720 libpcp local valgrind
++721 dbpmda local
++722 python local pcp
++723 pmda.proc local
++724 pmfind local
++725 pmda.jbd2 local
++726 pmlogger pmdumplog local
++727:retired avahi local
++728 libpcp getopt local timezone
++729 python local
++730 pmda.proc local cgroups
++731 pmda.proc local cgroups valgrind pmval
++732 pmda.linux local
++733 pmie pmval pmdumplog local kernel
++734 libpcp pmstat remote
++735 pmda.proc local
++736 pmlogrewrite local pmdumplog
++737 python local timezone
++738 local pmlogmv sanity
++739 python getopt local timezone
++740 pmda.sample pmstore secure local pmdbg
++741 python getopt local
++742 pcp python local
++743 pcp python local
++744 pmda.nvidia local
++745 pmda.nvidia local valgrind
++746 valgrind libpcp local
++747 pmda.linux local kernel
++748 pmlogrewrite pmda.mysql local pmdumplog
++749 pmcd local
++750:retired pmda.rpm local flakey pmval
++751:retired pmda.rpm local pmdumplog pmlogrewrite
++752 libpcp local pmval timezone
++753 derive local pmval pmstore kernel
++754 pmda.unbound local python
++755 pmda.apache pmda.install local
++756 pmda.perfevent local
++757 pmda.perfevent pmda.install local
++758 perl local pmstore
++759 pmda.unbound pmda.install local python
++760 pmda.activemq pmda.install local
++761 pmda.root local containers
++762 help local pmda.sample
++763 pmda local
++764 pmie local
++765 pmlogsummary local
++766 pmfind local
++767 pmda.linux pmda.proc pmda.root local containers kernel
++768 pmlogextract local pmdumplog
++769 other local
++770 libpcp pdu fault local valgrind
++771 perl local
++772 pmns local
++773 derive local
++774 pmdumplog local
++775 pmfind local
++776 pmfind local
++777 derive pmprobe pmie local pmval
++778 pmda.postgresql pmie local
++779 pmda local
++780 pmproxy local
++781 logutil local
++782:retired pmwebd local
++783:retired pmda.rpm local valgrind
++784 pmda.mic python local
++785 pcp atop local
++786 context context_local libpcp local
++787 archive local pmie pmlogrewrite pmdumplog pmval flakey kernel
++788 pmda.nginx pmda.install local
++789 pmda.zimbra local
++790 pmlogextract local
++791 pmlogextract valgrind local pmdumplog
++792 libpcp local pmdbg
++793 logutil local kernel
++794 containers pmcd pmda.pmcd local
++795 pmimport pmdumplog perl local
++796 pmda.elasticsearch local
++797 pmlogrewrite local pmdumplog
++798 pmda.nfsclient local python dbpmda
++799 pmlogrewrite local
++800 pmda.proc pmda.hotproc local
++801 pmda.netfilter local
++802 pmda valgrind dbpmda local
++803 libpcp derive local kernel
++804 pcp pmstat local
++805 pmda.postfix local
++806 pmstore pminfo pmie pmval pmprobe dbpmda local
++807 pcp local
++808 pmlogger local logutil
++809:retired pmcollect
++810 iostat archive multi-archive local pmlogextract pcp python
++811 pmlogger pmcpp local kernel
++812 pmlogextract local pmdumplog
++813 pmlogextract local
++814 pmprobe archive multi-archive local pmlogextract
++815 pmie local
++816 libpcp local
++817 pmstat archive multi-archive local pmlogextract
++818 pmval archive multi-archive local pmlogextract
++819 pmda.elasticsearch local
++820 pmda.linux local
++821 pmda.linux local
++822:reserved pmlogrewrite
++823 pmda.sample pmstore secure local pmdbg
++824 pmlogsummary local #1132476 pmdumplog kernel
++825 pmda.ds389 local
++826 pmda.linux local
++827 pmlogrewrite pmda.linux local pmdumplog
++828 valgrind archive context local kernel
++829 pcp python local
++830 other local
++831 pmda.sample pmstore secure local pmdbg
++832 pmda.sample pmstore secure local
++833 archive context local kernel
++834 pmie local
++835 pmda.memcache local
++836 pmlogsummary local pmdiff
++837 pmda.sample containers local pmval pmstore pmprobe pmdbg
++838 pmns local
++839 pcp python local
++840 avahi local
++841 pmda local python
++842 python local iostat pmval pcp kernel
++843 pmda local python
++844 pmda.linux local
++845 pmda.mounts local python
++846 pmimport pmdumplog perl local
++847 containers local
++848 pmcd secure local kernel
++849 pmie local
++850:retired pmcollect
++851 iostat local pcp python kernel
++852 pmda.proc local
++853 pmcpp local kernel
++854 pmlogger local pmlc pmdumplog pmstore folio
++855 pmda.netfilter local
++856 pmlogger local pmlc pmdumplog pmstore folio
++857 pmda.linux local valgrind kernel
++858 libpcp local fetch valgrind pmstore
++859 python libpcp local fetch
++860 pmda pmda.proc ostest local pmval
++861 pmcd pmda.pmcd local
++862 pmie local
++863 python local
++864 pcp python local collectl
++865 pmda local
++866 fault libpcp local
++867 pmproxy libpcp_web local
++868 pmda.install local
++869 pmda.linux local kernel
++870 pmlogcheck local
++871 pmie local pmstore
++872 pmda.linux local
++873 pmda.linux local kernel
++874 valgrind pmval libpcp local
++875 libpcp local valgrind
++876 pmda.xfs local
++877 libpcp local
++878 pmda.pipe local pmval
++879 pmda.pipe local
++880 pmrep python local kernel
++881 pmcd local
++882 pmlogger local pmlc pmdumplog pmstore folio
++883 pcp mpstat python local
++884 libpcp_web local
++885 pmda.linux local kernel
++886 pmda.linux local kernel
++887 pmlogsummary archive multi-archive local pmlogextract
++888 pmda.linux local
++889 pmda.proc local
++890 libpcp_import local
++891 libpcp local
++892 pmcd libpcp local
++893 pmcd local
++894 pmlogconf pmieconf local
++895 pmlogger local
++896 pmlogger local pmdumplog kernel
++897 pmlc pmlogger local
++898 pmlogmv local
++899 libpcp getopt folio local
++900 libpcp sanity local timezone
++901 libpcp event local
++902 libpcp mem_leak valgrind event local
++903 libpcp threads local context_local context
++904 python local
++905 oldversion remote
++906 pmda.sample indom help pmda pminfo local
++907 pmlogextract local pmdumplog
++908 indom help pmda pminfo local
++909 libpcp pmns local
++910 pmda.linux pmval local kernel
++911 pmda.linux local
++912 pmda.nutcracker local
++913 pmda.redis local
++914 libpcp threads local context_local context
++915 pmcd pmlogger pmproxy libpcp local pmlc
++916 pmlogextract pmlogcheck local kernel
++917 selinux local
++918 pmcd local kernel
++919 pmlogger pmstat local pmdumplog
++920 logutil local
++921 pmdumplog local kernel
++922 derive pmie pmval local kernel
++923 derive libpcp valgrind local
++924 pmda.docker local valgrind helgrind
++925 logutil local
++926 ganglia2pcp local pmdumplog
++927 derive local kernel
++928 archive local pmdumplog
++929 logutil local
++930 pmlogrewrite local pmdumplog
++931 archive pmval local
++932 pmlogger local pmdumplog folio
++933 pmda.proc local
++934 pmieutil local
++935 derive local
++936 pcp tapestat python local
++937 derive local
++938 derive local kernel
++939 derive local kernel
++940 selinux local
++941 pmcd local
++942 threads valgrind local helgrind
++943 pmprobe pmda.proc local
++944 pmcd secure local pmstore
++945 pmlogrewrite pmda.xfs local pmdumplog
++946 pmfind avahi local
++947 pmlogger local pmdumplog
++948 pmlogger context_local local pmlogcheck pmdumplog kernel
++949 python local timezone
++950 pmproxy avahi local
++951 pmie local pmval kernel
++952 threads valgrind local helgrind
++953 libpcp threads local
++954 libpcp threads derive local
++955:retired pmda.linux local kernel
++956 pmcd local
++957 pmda.linux local valgrind
++958 archive local pmdumplog
++959 pmda.sample pmstore local
++960 pmda.ds389 local
++961 pmlogextract local
++962 archive local pmval pmdumplog kernel
++963 libpcp local
++964 pmcd local pmda.xfs pmda.dm
++965 derive local kernel
++966 secure local kernel
++967 zsh local pcp2xxx pcp2elasticsearch pcp2xlsx pcp2influxdb pcp2graphite pmrep python pcp2zabbix pcp2xml pcp2json
++968 python local derive kernel
++969 derive local kernel
++970 pmclient archive multi-archive local sanity pmlogextract python
++971 pmlogrewrite pmda.proc local pmdumplog
++972 pmda.zswap dbpmda local python
++973 pmda.zswap pmda.install local python kernel
++974 pmda.proc local
++975 pmimport local
++976 dbpmda perl pmda.lustre local
++977 libpcp valgrind local containers
++978 libpcp getopt sanity local timezone
++979 python local
++980 python local
++981 dbpmda perl pmda.gpfs local
++982 pmda.proc pmda.hotproc local pmstore
++983 pmie local
++984 cgroups local pmlogrewrite
++985 pmimport pmdumplog perl local
++986 pmimport pmdumplog perl local
++987 pmda.xfs local
++988 pmda.xfs local valgrind
++989 archive local
++990 pmda.mmv local valgrind
++991 pcp python free local
++992 pmcpp pmlogger local kernel
++993 pmlogger pmdumplog local
++994 other verify
++995 python local
++996 pmdiff local
++997 pmlogextract local pmlogcheck pmdumplog
++998 threads libpcp local
++999 pmns local
++1000 pmdumptext local
++1001 pmchart local x11
++1002 pmchart local x11
++1003 pmchart local kernel x11
++1004 pmchart local kernel x11
++1005 pmchart local x11
++1006 pmchart local x11
++1007 pmchart local kernel x11
++1008 pmdumptext libpcp_qmc local kernel x11
++1009 pmdumptext libpcp_qmc local x11
++1010 pmdumptext pmlogger libpcp_qmc local x11
++1011 pmdumptext pmval libpcp_qmc local x11
++1012 pmdumptext libpcp_qmc local x11
++1013 libpcp_qmc local x11
++1014 libpcp_qmc local x11
++1015 libpcp_qmc local x11
++1016 libpcp_qmc local x11
++1017:retired libpcp_qmc local flakey kernel x11
++1018:retired libpcp_qmc local flakey x11
++1019:retired libpcp_qmc local flakey pmstore x11
++1020:retired libpcp_qmc local flakey pmstore x11
++1021 libpcp_qmc local x11
++1022 pmdumptext local kernel x11
++1023 pmdumptext local x11
++1024 pmda.linux local kernel
++1025 pmdumptext pmlogger pmdumplog pmloglabel local x11
++1026 pmdumptext remote kernel x11
++1027 pmdumptext local pmstore x11
++1028 pmdumptext local kernel x11
++1029 libpcp_qmc local pmstore x11
++1030 pmda.linux local
++1031 pmda.slurm perl local
++1032 pmproxy containers local python
++1033 pmda.named local
++1034 pmda.named local
++1035 pmda.oracle local pmstore
++1036 pmclient archive multi-archive local pmlogextract python
++1037 pminfo archive multi-archive local pmlogextract
++1038 pmrep archive multi-archive local pmlogextract python
++1039 libpcp local
++1040 dbpmda local
++1041 pmda.libvirt local python
++1042 pmproxy pmda.proc local python
++1043 pmda.linux local kernel
++1044 pmie local pmieconf sanity
++1045 pmie local pmieconf pmpost
++1046 pmie local pmieconf
++1047 pmie local pmieconf
++1048 python local kernel
++1049 pmie pmieconf local
++1050 pmieconf local
++1051 pmieconf #696008 local
++1052 pmda.json local python
++1053 pmda.json pmda.install local python
++1054 pmlogger pmcpp local pmdumplog kernel
++1055 pmlogger local pmdumplog pmstore folio
++1056 derive local kernel
++1057 pmlogrewrite local
++1058 pmda.bash local
++1059 pmcd local
++1060 pmieutil local
++1061 pmda.lio local python
++1062 pmrep python local
++1063 derive local
++1064 derive local
++1065 libpcp valgrind local
++1066 derive valgrind local
++1067 zbxpcp local pmda.sample
++1068 pcp2zabbix python pcp2xxx local
++1069 pmrep python local timezone kernel
++1070 pmrep pmimport python perl local
++1071 pmrep python local kernel
++1072 pmrep python archive local kernel
++1073 pmda.linux local kernel
++1074 threads valgrind local helgrind
++1075 pmlogrewrite valgrind local
++1076 pmlogcheck local
++1077 pmcd libpcp archive local kernel
++1078 pcp python pidstat local
++1079 pcp atop local
++1080 valgrind pcp atop local
++1081 python pcp local
++1082 python local
++1083 pmcd local kernel
++1084 pmda.linux local
++1085 pmlogger local pmdumplog
++1086 pmprobe local
++1087 pmda.bind2 local
++1088:retired pmmgr local
++1089 atop local folio
++1090 pmproxy local context
++1091 pmns libpcp context local kernel
++1092 libpcp local
++1093 pmcpp local
++1094 other local
++1095 derive local kernel
++1096:retired libpcp threads pmmgr local
++1097 pmlogconf local
++1098 python local pmstore sanity
++1099 archive iostat local pmie pcp python
++1100 bash local pcp2xxx pcp2elasticsearch pcp2xlsx pcp2influxdb pcp2graphite pmrep python pcp2zabbix pcp2xml pcp2json
++1101 libpcp_web local valgrind
++1102 pmda.openmetrics local python
++1103 derive local
++1104 kernel local
++1105 derive local kernel
++1106 libpcp local
++1107 pmie local
++1108 logutil local folio pmlogextract
++1109 pmlogger valgrind local pmdumplog
++1110 pmda.haproxy local python
++1111 pcp2influxdb python pcp2xxx local
++1112 pmda.linux local
++1113 pcp ipcs python local
++1114 archive pmval multi-archive local pmlogextract kernel
++1115 pmda.bcc local python
++1116 pmda.bcc local python
++1117 pmda.bcc local python labels kernel
++1118 pmda.bcc local python labels
++1119 pmlogsummary archive multi-archive decompress-xz local pmlogextract
++1120 pmda.openmetrics local python
++1121 pmda.linux local kernel
++1122 pmie local
++1123 pmchart local kernel x11
++1124 pmda.bcc local python
++1125:retired pmcollect
++1126 pmda.bcc local python
++1127 pmda.bcc local python
++1128 pmie local
++1129 derive local kernel
++1130 pcp2elasticsearch python pcp2xxx local
++1131 pcp2json python pcp2xxx local
++1132 pcp2xlsx python pcp2xxx local kernel
++1133 pcp2xml python pcp2xxx local
++1134 pmrep pcp2json pcp2xml python pcp2xxx local python kernel
++1135 pmrep python pmda.sample archive local kernel
++1136 pmrep python pmda.sample local kernel
++1137 derive pmrep local python kernel
++1138 archive pmval multi-archive decompress-xz local pmlogextract kernel
++1139 pmrep python local kernel
++1140 pidstat local python pcp pmlogrewrite pmrep derive free
++1141 selinux local
++1142 pmie local kernel
++1143 pmie local
++1144 pmda.proc local
++1145 fault libpcp local
++1146 logutil local
++1147 logutil local
++1148 logutil local
++1149 pmlogrewrite local
++1150 pmda.bcc local python
++1151 pmda.bcc local python
++1152 pmda.bcc local python
++1153 pmda.bcc local python
++1154 pmda.bcc local python
++1155 pmda.bcc local python
++1156 pmda.bcc local python
++1157 pmda.bcc local python
++1158 pmda.bcc local python
++1159 pmlogger local pmdumplog kernel
++1160 pmda.netcheck local python
++1161 pmda.netcheck local python
++1162 find-filter local
++1163 pmlogrewrite local
++1164 pmda.linux local valgrind
++1165 pmda.bcc local python
++1166 libpcp local
++1167 pmdumplog labels archive local pmrep python kernel
++1168 pmrep pmda.bcc local python
++1169 pmrep python local kernel
++1170 pmda.bcc local python
++1171 pmda.bcc local python
++1172 pmda.bcc local python
++1173 pmda.bcc local python
++1174 threads valgrind local helgrind
++1175 pmda.bcc local python
++1176 pmda.bcc local python
++1177 pmns derive libpcp pmlogger local kernel
++1178 pmda.bcc local python
++1179 pmda.bcc local python
++1180 logutil local pmrep python
++1181 pmda.bcc local python
++1182 libpcp local
++1183 pmrep python archive local
++1184 pminfo pmseries local
++1185 pmrep python archive local
++1186 pmie local not_in_ci
++1187 python pcp dstat local
++1188 pmda.dm local valgrind
++1189 find-filter local
++1190 other local
++1191 pmda.openmetrics local python
++1192 containers local
++1193 pmlogrewrite labels help pmdumplog local
++1194 pmlogrewrite local
++1195 pmlogrewrite local
++1196 pmcd local
++1197 pmlogextract local
++1198 pmlogrewrite pmda.linux local
++1199 libpcp pmcd local
++1200 logutil local
++1201 logutil remote
++1202 pmda.dm local pmrep python
++1203 derive pmval libpcp local
++1204 pmlogctl local sanity
++1205 pmlogctl local
++1206 pmlogctl local
++1207 pcp dstat python local
++1208 pmlogctl local
++1209 pmlogctl local
++1210 pmlogctl local
++1211 pmseries local kernel
++1212 pmseries local
++1213 pmlogctl local
++1214 pmproxy pmseries libpcp_web local
++1215 pmlogctl local
++1216 pmlogctl local
++1217 pmrep python local
++1218 pmda.root local
++1219 pcp local
++1220 pmda.proc local
++1221 labels pmda.openmetrics local python
++1222 pmda.linux pmda.proc local valgrind
++1223 pmlogctl local
++1224 pcp dstat python local
++1225:retired pmwebd local pmrep python pcp kernel
++1226 pmiectl local
++1227 derive local
++1228 pmiectl local
++1229 pmlogextract pmdumplog labels help local sanity
++1230 pmiectl local
++1231 pmlogrewrite labels help pmdumplog local
++1232 logutil pmlogctl local
++1233 derive local
++1234 libpcp_web local
++1235 derive local
++1236 derive local
++1237 derive local
++1238 iostat archive multi-archive decompress-xz local pmlogextract pcp python
++1239 pmlogrewrite labels pmdumplog local
++1240 libpcp pmrep local python
++1241 pmlogrewrite local
++1242 pmrep archive multi-archive decompress-xz local pmlogextract python
++1243 valgrind pmfind libpcp local helgrind
++1244 pmlogextract local
++1245 libpcp local
++1246:reserved pmlogreduce local
++1247 pmlogrewrite labels pmdumplog local
++1248 pmlogctl local
++1249 pmiectl local
++1250 selinux local
++1251 man local
++1252 derive local
++1253 derive local valgrind
++1254 derive local
++1255 libpcp local kernel
++1256 derive valgrind local
++1257 libpcp python local
++1258 pmda.linux local valgrind
++1259 derive valgrind local
++1260 derive local
++1261 derive local
++1262 derive valgrind local
++1263 derive local
++1264:retired pmcollect
++1265 pmda.linux local valgrind
++1266 atop pcp local
++1267 pmlogrewrite labels help pmdumplog local
++1268 derive local
++1269 libpcp local kernel
++1270 derive fault local
++1271 derive local
++1272 pmlogmv local
++1273 pmlogger fetch local
++1274 pmlogextract pmdumplog labels help local sanity
++1275 man pmlogger local
++1276:retired pmmgr containers local
++1277 dbpmda local pmdbg
++1278 dbpmda local pmdbg
++1279 dbpmda local
++1280 archive pmdumplog local
++1281 archive pmdumplog valgrind local
++1282:retired other local
++1283 dbpmda local
++1284 pmrep pmda.linux local
++1285 pmlogsummary local
++1286 pmda.bcc local python
++1287 pmda.install pmda.openmetrics local python
++1288 archive pmval local
++1289 pmval archive multi-archive decompress-xz local pmlogextract
++1290:reserved pmproxy local pmval pmie pmstat valgrind pmdumptext
++1291 atop archive local
++1292 pmlc local
++1293 pmlc local valgrind
++1294 libpcp_mmv labels local valgrind
++1295 pmda.sample local
++1296 pmie local
++1297 pmieutil local
++1298 pmval local
++1299 libpcp pminfo local
++1300 libpcp local
++1301 pmda.pmproxy pmda.mmv local
++1302 pmlogrewrite valgrind local
++1303 pcp dstat python local
++1304 pmstat context context_local local
++1305 pmlogger local valgrind
++1306 pmda.openmetrics labels local python
++1307 dbpmda pmda.sample local
++1308 dbpmda pmda.sample valgrind local
++1309 pmda.zfs local
++1310 labels python local
++1311 derive pmdumptext local
++1312 derive pmdumptext valgrind local
++1313 libpcp local
++1314 libpcp valgrind local
++1315 sanity local
++1316 libpcp local
++1317 libpcp local valgrind
++1318 pmprobe pmlogconf local kernel
++1319 libpcp local valgrind helgrind
++1320 pmval local
++1321 pmlogger pmda.openmetrics local python
++1322 pmval local valgrind
++1323 pmlogrewrite labels help pmdumplog local
++1324 pmclient archive multi-archive decompress-xz local pmlogextract python
++1325 pmdumplog local
++1326 pmstore pmda.pmcd local
++1327 pmdumplog local valgrind
++1330 pmda.openmetrics local python
++1331 verify local
++1337 pmda.mssql local
++1338 pmlogrewrite labels pmdumplog local
++1340 pmcd pmda.pmcd pmstore local
++1342 pmda.openmetrics local python
++1343:retired pmmgr local pmlogrewrite
++1344:retired pmmgr local
++1347 atop pcp local
++1349 pmlogrewrite labels pmdumplog local kernel
++1350 pmda.proc local
++1351 pmcd pmda.mmv libpcp pmda local
++1354 pmval archive local
++1357 pmda.podman valgrind local
++1358 pmda.podman local
++1359 libpcp local pmdbg
++1362 pmda.postgresql local
++1367 labels pmda.simple local python
++1368 labels help pmlogger pmdumplog local sanity
++1369 labels pmcd pmlogger pmdumplog local
++1370:reserved man local
++1372 pmie local
++1379 pmproxy local
++1383 pmlogrewrite labels pmdumplog local
++1385 pmda.openmetrics local python
++1388 pmproxy local secure
++1389:retired pmwebd local
++1390 atop pcp local
++1393 pmda.linux local
++1395 pmda.openmetrics local python
++1396 pcp python pidstat local archive
++1397 pmda.smart local valgrind
++1398 pidstat local
++1399 pidstat local
++1400 pcp free local
++1401 pmproxy local
++1403 pmda.linux local valgrind
++1407 pmchart derive local x11
++1408 pmchart libpcp_qmc local x11
++1415 pmda.mmv labels local
++1416 pmlogrewrite local
++1422 pmda.mmv local valgrind
++1423 pcp2spark python pcp2xxx local
++1433 pmproxy local
++1434 pmda.nfsclient local
++1435 pmda.elasticsearch local
++1436 pmda.postgresql local
++1437 pmda.kvm local
++1455 pmlogrewrite labels pmdumplog local
++1457 pmproxy local
++1480 pmda.lmsensors local
++1489 python pmrep pmimport local
++1490 python local labels
++1495 pmlogrewrite labels pmdumplog local
++1511 pmcd local
++1530 pmda.zfs local valgrind
++1531 pmda.zfs local valgrind
++1532 pmda.zfs local
++1533 pmda.zfs local valgrind
++1534 pmda.zfs local valgrind
++1543 pmproxy local
++1544 pmproxy python local
++1545 pcp2xml python pcp2xxx local
++1546 pmrep python local
++1547 pmrep python local
++1548 pmrep python local
++1549 pmrep python local
++1566 logutil libpcp local
++1573 pmproxy libpcp_web pmlogger local
++1588 python iostat local
++1598 pmda.statsd local
++1599 pmda.statsd local
++1600 pmseries pmcd pmproxy pmlogger local
++1601 pmseries pmproxy local
++1602 pmproxy local
++1603 pmproxy local
++1608 pmproxy local
++1613 pmda.linux kernel local
++1622 selinux local
++1623 libpcp_import collectl local
++1634 pmda.sockets local
++1644 pmda.perfevent local
++1660 libpcp labels local
++1661 pmproxy libpcp_web pmlogger local
++1671 multi-archive archive libpcp pmrep local python
++1672 secure pmcd local
++1680 openvswitch local
++1681 pmrep pcp2xxx pmlogconf local
++1682 pmrep pcp2xxx pmlogconf valgrind local
++1688 pmieconf local
++1689 pmproxy libpcp_web local
++1690 pmseries local
++1692 pmda.pmcd local
++1694 pidstat local python pcp
++1695 pmproxy valgrind local
++1696 pmproxy valgrind local
++1700 pmda.bpftrace local python
++1701 pmda.bpftrace local python
++1702 pmda.bpftrace local python
++1703 pmda.bpftrace local python
++1704 pmda.bpftrace local python
++1705 pmda.bpftrace local python
++1706 pmda.bpftrace local python
++1707 pmda.bpftrace local python
++1708 pmda.statsd local
++1709 pmda.statsd local
++1710 pmda.statsd local
++1711 pmda.statsd local
++1712 pmda.statsd local
++1713 pmda.statsd local
++1714 pmda.statsd local
++1715 pmda.statsd local
++1716 pmda.statsd local
++1717 pmda.statsd local
++1718 pmda.statsd local
++1719 pmda.statsd local
++1720 pmda.statsd local valgrind dbpmda
++1721 pmda.bpftrace local python
++1722 pmda.bpftrace local python
++1723 pmda.bpftrace local python
++1724 pmda.bpftrace local python
++1725 pmda.bpftrace local python
++1740 pmda.proc local
++1745 pmlogger libpcp pmval local
++1748 atop local
++1753 fetch valgrind local
++1763 pmlogctl local
++1768 pmfind local
++1769 pmda.linux local
++1773 pmseries pmproxy libpcp_web local
++1775 pmdumptext archive local
++1793 pmrep pcp2xxx python local
++1801 dstat python pcp local
++1805 pmda.linux kernel local
++1813 python labels local
++1814 pmda.linux local
++1820 atop local
++1821 pmlogpaste local
++1824 pmproxy local
++1825 libpcp pmcd local valgrind
++1826 libpcp pmcd local
++1837 pmproxy local
++1844 pmdumptext libpcp_qmc remote
++1850 pmseries libpcp_web local
++1855 pmda.rabbitmq local
++1871 pmsearch local
++1872 pmproxy local
++1874 pmseries pmproxy local
++1876 pmcd secure local
++1886 pmseries libpcp_web local
++1896 pmlogger logutil pmlc local
++1897 pmda.hacluster local valgrind
++1899 fetch local
++1901 pmlogger local
++1902 help local
++1937 pmlogrewrite pmda.xfs local
++1955 libpcp pmda pmda.pmcd local
++4751 libpcp threads valgrind local pcp helgrind
+diff -Naurp pcp-5.3.1.orig/qa/src/check_pmi_errconv.c pcp-5.3.1/qa/src/check_pmi_errconv.c
+--- pcp-5.3.1.orig/qa/src/check_pmi_errconv.c	1970-01-01 10:00:00.000000000 +1000
++++ pcp-5.3.1/qa/src/check_pmi_errconv.c	2021-06-24 17:22:58.945372343 +1000
+@@ -0,0 +1,61 @@
++/*
++ * check error handling with pmiWrite after PM_ERR_CONV.
++ *
++ * Copyright (c) 2021 Red Hat.  All Rights Reserved.
++ */
++
++#include <pcp/pmapi.h>
++#include <pcp/import.h>
++
++int
++main(int argc, char **argv)
++{
++    pmInDom indom = pmInDom_build(245, 0);
++    pmID pmid = pmID_build(245, 0, 0);
++    int sts;
++
++    if (argc != 2) {
++	fprintf(stderr, "Usage: %s <archive>\n", argv[0]);
++	exit(2);
++    }
++
++    if ((sts = pmiStart(argv[1], 0)) < 0) {
++	fprintf(stderr, "pmiStart: %s - %s\n", argv[1], pmiErrStr(sts));
++	exit(1);
++    }
++    if ((sts = pmiSetTimezone("UTC")) < 0) {
++	fprintf(stderr, "pmiSetTimezone(UTC): %s\n", pmiErrStr(sts));
++	exit(1);
++    }
++
++    if ((sts = pmiAddMetric("my.metric.int", pmid, PM_TYPE_32,
++			indom, PM_SEM_INSTANT, pmiUnits(0,0,0,0,0,0))) < 0) {
++	fprintf(stderr, "pmiAddMetric: %s\n", pmiErrStr(sts));
++	exit(1);
++    }
++    if ((sts = pmiAddInstance(indom, "0", 0)) < 0) {
++	fprintf(stderr, "pmiAddInstance(0): %s\n", pmiErrStr(sts));
++	exit(1);
++    }
++    if ((sts = pmiAddInstance(indom, "1", 1)) < 0) {
++	fprintf(stderr, "pmiAddInstance(1): %s\n", pmiErrStr(sts));
++	exit(1);
++    }
++
++    /* FALLTHROUGH on all error paths now to exercise the problem */
++
++    if ((sts = pmiPutValue("my.metric.int", "0", "1234.5678")) < 0)
++	fprintf(stderr, "pmiPutValue: inst 0: %s\n", pmiErrStr(sts));
++
++    if ((sts = pmiPutValue("my.metric.int", "1", "123.45678")) < 0)
++	fprintf(stderr, "pmiPutValue: inst 1: %s\n", pmiErrStr(sts));
++
++    /* TZ=UTC date --date='@1547483647' */
++    if ((sts = pmiWrite(1547483647, 0)) < 0)
++	fprintf(stderr, "pmiWrite: %s\n", pmiErrStr(sts));
++
++    if ((sts = pmiEnd()) < 0)
++	fprintf(stderr, "pmiEnd: %s\n", pmiErrStr(sts));
++
++    return 0;
++}
+diff -Naurp pcp-5.3.1.orig/qa/src/.gitignore pcp-5.3.1/qa/src/.gitignore
+--- pcp-5.3.1.orig/qa/src/.gitignore	2021-05-26 17:43:26.000000000 +1000
++++ pcp-5.3.1/qa/src/.gitignore	2021-06-24 17:22:58.945372343 +1000
+@@ -26,6 +26,7 @@ check_import
+ check_import_name
+ check_import.pl
+ check_pmiend_fdleak
++check_pmi_errconv
+ checkstructs
+ chkacc1
+ chkacc2
+diff -Naurp pcp-5.3.1.orig/qa/src/GNUlocaldefs pcp-5.3.1/qa/src/GNUlocaldefs
+--- pcp-5.3.1.orig/qa/src/GNUlocaldefs	2021-05-26 17:43:26.000000000 +1000
++++ pcp-5.3.1/qa/src/GNUlocaldefs	2021-06-24 17:22:58.945372343 +1000
+@@ -1,5 +1,5 @@
+ #
+-# Copyright (c) 2012-2020 Red Hat.
++# Copyright (c) 2012-2021 Red Hat.
+ # Copyright (c) 2009 Aconex.  All Rights Reserved.
+ # Copyright (c) 1997-2002 Silicon Graphics, Inc.  All Rights Reserved.
+ #
+@@ -42,9 +42,9 @@ CFILES = disk_test.c exercise.c context_
+ 	username.c rtimetest.c getcontexthost.c badpmda.c chkputlogresult.c \
+ 	churnctx.c badUnitsStr_r.c units-parse.c rootclient.c derived.c \
+ 	lookupnametest.c getversion.c pdubufbounds.c statvfs.c storepmcd.c \
+-	github-50.c archfetch.c sortinst.c fetchgroup.c \
++	github-50.c archfetch.c sortinst.c fetchgroup.c loadconfig2.c \
+ 	loadderived.c sum16.c badmmv.c multictx.c mmv_simple.c \
+-	httpfetch.c json_test.c check_pmiend_fdleak.c loadconfig2.c \
++	httpfetch.c json_test.c check_pmiend_fdleak.c check_pmi_errconv.c \
+ 	archctl_segfault.c debug.c int2pmid.c int2indom.c exectest.c \
+ 	unpickargs.c hanoi.c progname.c countmark.c \
+ 	indom2int.c pmid2int.c scanmeta.c traverse_return_codes.c \
+@@ -537,6 +537,10 @@ check_pmiend_fdleak:	check_pmiend_fdleak
+ 	rm -f $@
+ 	$(CCF) $(CDEFS) -o $@ $@.c $(LDLIBS) -lpcp_import
+ 
++check_pmi_errconv:	check_pmi_errconv.c
++	rm -f $@
++	$(CCF) $(CDEFS) -o $@ $@.c $(LDLIBS) -lpcp_import
++
+ # --- need libpcp_web
+ #
+ 
+diff -Naurp pcp-5.3.1.orig/src/libpcp_import/src/stuff.c pcp-5.3.1/src/libpcp_import/src/stuff.c
+--- pcp-5.3.1.orig/src/libpcp_import/src/stuff.c	2021-02-25 10:10:21.000000000 +1100
++++ pcp-5.3.1/src/libpcp_import/src/stuff.c	2021-06-24 17:22:58.945372343 +1000
+@@ -39,13 +39,10 @@ _pmi_stuff_value(pmi_context *current, p
+ 
+     if (current->result == NULL) {
+ 	/* first time */
+-	current->result = (pmResult *)malloc(sizeof(pmResult));
++	current->result = (pmResult *)calloc(1, sizeof(pmResult));
+ 	if (current->result == NULL) {
+-	    pmNoMem("_pmi_stuff_value: result malloc:", sizeof(pmResult), PM_FATAL_ERR);
++	    pmNoMem("_pmi_stuff_value: result calloc", sizeof(pmResult), PM_FATAL_ERR);
+ 	}
+-	current->result->numpmid = 0;
+-	current->result->timestamp.tv_sec = 0;
+-	current->result->timestamp.tv_usec = 0;
+     }
+     rp = current->result;
+ 
+@@ -60,19 +57,26 @@ _pmi_stuff_value(pmi_context *current, p
+     }
+     if (i == rp->numpmid) {
+ 	rp->numpmid++;
+-	size = sizeof(pmResult) + (rp->numpmid - 1)*sizeof(pmValueSet *);
++	size = sizeof(pmResult) + (rp->numpmid-1)*sizeof(pmValueSet *);
+ 	rp = current->result = (pmResult *)realloc(current->result, size);
+ 	if (current->result == NULL) {
+-	    pmNoMem("_pmi_stuff_value: result realloc:", size, PM_FATAL_ERR);
++	    pmNoMem("_pmi_stuff_value: result realloc", size, PM_FATAL_ERR);
+ 	}
+ 	rp->vset[rp->numpmid-1] = (pmValueSet *)malloc(sizeof(pmValueSet));
+ 	if (rp->vset[rp->numpmid-1] == NULL) {
+-	    pmNoMem("_pmi_stuff_value: vset alloc:", sizeof(pmValueSet), PM_FATAL_ERR);
++	    pmNoMem("_pmi_stuff_value: vset alloc", sizeof(pmValueSet), PM_FATAL_ERR);
+ 	}
+ 	vsp = rp->vset[rp->numpmid-1];
+ 	vsp->pmid = pmid;
+ 	vsp->numval = 1;
+     }
++    else if (rp->vset[i]->numval < 0) {
++	/*
++	 * This metric is already under an error condition - do
++	 * not attempt to add additional instances / values now.
++	 */
++	return rp->vset[i]->numval;
++    }
+     else {
+ 	int		j;
+ 	for (j = 0; j < rp->vset[i]->numval; j++) {
+@@ -84,7 +88,7 @@ _pmi_stuff_value(pmi_context *current, p
+ 	size = sizeof(pmValueSet) + (rp->vset[i]->numval-1)*sizeof(pmValue);
+ 	vsp = rp->vset[i] = (pmValueSet *)realloc(rp->vset[i], size);
+ 	if (rp->vset[i] == NULL) {
+-	    pmNoMem("_pmi_stuff_value: vset realloc:", size, PM_FATAL_ERR);
++	    pmNoMem("_pmi_stuff_value: vset realloc", size, PM_FATAL_ERR);
+ 	}
+     }
+     vp = &vsp->vlist[vsp->numval-1];
+@@ -92,75 +96,82 @@ _pmi_stuff_value(pmi_context *current, p
+     dsize = -1;
+     switch (mp->desc.type) {
+ 	case PM_TYPE_32:
+-	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_INSITU;
+ 	    vp->value.lval = (__int32_t)strtol(value, &end, 10);
+ 	    if (*end != '\0') {
+-		vsp->numval = PM_ERR_CONV;
++		if (vsp->numval == 1) vsp->numval = PM_ERR_CONV;
++		else rp->vset[i]->numval--;
+ 		return PM_ERR_CONV;
+ 	    }
++	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_INSITU;
+ 	    break;
+ 
+ 	case PM_TYPE_U32:
+-	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_INSITU;
+ 	    vp->value.lval = (__uint32_t)strtoul(value, &end, 10);
+ 	    if (*end != '\0') {
+-		vsp->numval = PM_ERR_CONV;
++		if (vsp->numval == 1) vsp->numval = PM_ERR_CONV;
++		else rp->vset[i]->numval--;
+ 		return PM_ERR_CONV;
+ 	    }
++	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_INSITU;
+ 	    break;
+ 
+ 	case PM_TYPE_64:
+-	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    ll = strtoint64(value, &end, 10);
+ 	    if (*end != '\0') {
+-		vsp->numval = PM_ERR_CONV;
++		if (vsp->numval == 1) vsp->numval = PM_ERR_CONV;
++		else rp->vset[i]->numval--;
+ 		return PM_ERR_CONV;
+ 	    }
+ 	    dsize = sizeof(ll);
+ 	    data = (void *)&ll;
++	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    break;
+ 
+ 	case PM_TYPE_U64:
+-	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    ull = strtouint64(value, &end, 10);
+ 	    if (*end != '\0') {
+-		vsp->numval = PM_ERR_CONV;
++		if (vsp->numval == 1) vsp->numval = PM_ERR_CONV;
++		else rp->vset[i]->numval--;
+ 		return PM_ERR_CONV;
+ 	    }
+ 	    dsize = sizeof(ull);
+ 	    data = (void *)&ull;
++	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    break;
+ 
+ 	case PM_TYPE_FLOAT:
+-	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    f = strtof(value, &end);
+ 	    if (*end != '\0') {
+-		vsp->numval = PM_ERR_CONV;
++		if (vsp->numval == 1) vsp->numval = PM_ERR_CONV;
++		else rp->vset[i]->numval--;
+ 		return PM_ERR_CONV;
+ 	    }
+ 	    dsize = sizeof(f);
+ 	    data = (void *)&f;
++	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    break;
+ 
+ 	case PM_TYPE_DOUBLE:
+-	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    d = strtod(value, &end);
+ 	    if (*end != '\0') {
+-		vsp->numval = PM_ERR_CONV;
++		if (vsp->numval == 1) vsp->numval = PM_ERR_CONV;
++		else rp->vset[i]->numval--;
+ 		return PM_ERR_CONV;
+ 	    }
+ 	    dsize = sizeof(d);
+ 	    data = (void *)&d;
++	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    break;
+ 
+ 	case PM_TYPE_STRING:
+-	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    dsize = strlen(value)+1;
+ 	    data = (void *)value;
++	    if (vsp->numval == 1) vsp->valfmt = PM_VAL_DPTR;
+ 	    break;
+ 
+ 	default:
+-	    vsp->numval = PM_ERR_TYPE;
++	    if (vsp->numval == 1) vsp->numval = PM_ERR_TYPE;
++	    else rp->vset[i]->numval--;
+ 	    return PM_ERR_TYPE;
+     }
+ 
+@@ -170,7 +181,7 @@ _pmi_stuff_value(pmi_context *current, p
+ 
+ 	vp->value.pval = (pmValueBlock *)malloc(need < sizeof(pmValueBlock) ? sizeof(pmValueBlock) : need);
+ 	if (vp->value.pval == NULL) {
+-	    pmNoMem("_pmi_stuff_value: pmValueBlock:", need < sizeof(pmValueBlock) ? sizeof(pmValueBlock) : need, PM_FATAL_ERR);
++	    pmNoMem("_pmi_stuff_value: pmValueBlock", need < sizeof(pmValueBlock) ? sizeof(pmValueBlock) : need, PM_FATAL_ERR);
+ 	}
+ 	vp->value.pval->vlen = (int)need;
+ 	vp->value.pval->vtype = mp->desc.type;
+diff -Naurp pcp-5.3.1.orig/src/python/pcp/pmconfig.py pcp-5.3.1/src/python/pcp/pmconfig.py
+--- pcp-5.3.1.orig/src/python/pcp/pmconfig.py	2021-05-20 15:04:32.000000000 +1000
++++ pcp-5.3.1/src/python/pcp/pmconfig.py	2021-06-24 17:22:58.946372326 +1000
+@@ -869,8 +869,8 @@ class pmConfig(object):
+                 self.util.metrics[metric][3] = 1
+             else:
+                 self.util.metrics[metric][3] = 0
+-            # As a special service for the pmrep(1) utility,
+-            # we force raw output with its archive mode.
++            # Force raw output with archive mode of any tool in order to
++            # create pmlogger(1) compatible archives that can be merged.
+             if (hasattr(self.util, 'type') and self.util.type == 1) or \
+                self.util.metrics[metric][3] == 'raw' or \
+                (hasattr(self.util, 'output') and self.util.output == 'archive'):
+@@ -930,6 +930,11 @@ class pmConfig(object):
+             if not self.util.metrics[metric][2]:
+                 self.util.metrics[metric][2] = str(unit)
+ 
++            # Force native units with archive mode of any tool in order to
++            # create pmlogger(1) compatible archives that can be merged.
++            if hasattr(self.util, 'output') and self.util.output == 'archive':
++                self.util.metrics[metric][2] = str(unit)
++
+             # Finalize text label and unit/scale
+             try:
+                 label = self.util.metrics[metric][2]
diff --git a/SPECS/pcp.spec b/SPECS/pcp.spec
index 82a2da0..ab3962e 100644
--- a/SPECS/pcp.spec
+++ b/SPECS/pcp.spec
@@ -1,6 +1,6 @@
 Name:    pcp
 Version: 5.3.1
-Release: 1%{?dist}
+Release: 2%{?dist}
 Summary: System-level performance monitoring and performance management
 License: GPLv2+ and LGPLv2+ and CC-BY
 URL:     https://pcp.io
@@ -8,6 +8,9 @@ URL:     https://pcp.io
 %global  artifactory https://performancecopilot.jfrog.io/artifactory
 Source0: %{artifactory}/pcp-source-release/pcp-%{version}.src.tar.gz
 
+Patch000: redhat-bugzilla-1947989.patch
+Patch001: redhat-bugzilla-1974266.patch
+
 %if 0%{?fedora} >= 26 || 0%{?rhel} > 7
 %global __python2 python2
 %else
@@ -2213,6 +2216,8 @@ updated policy package.
 
 %prep
 %setup -q
+%patch000 -p1
+%patch001 -p1
 
 %build
 # fix up build version
@@ -3270,6 +3275,10 @@ PCP_LOG_DIR=%{_logsdir}
 %files zeroconf -f pcp-zeroconf-files.rpm
 
 %changelog
+* Thu Jun 24 2021 Nathan Scott <nathans@redhat.com> - 5.3.1-2
+- Fix pmproxy parallel TLS requests bug (BZ 1947989)
+- Backport pmrep archive creation fix (BZ 1974266)
+
 * Fri Jun 04 2021 Nathan Scott <nathans@redhat.com> - 5.3.1-1
 - Improved diagnostics from pmie service scripts (BZ 1954576)
 - Drop option configuration file env var setting (BZ 1967174)