aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2018-10-23 13:19:42 -0500
committerbaude <bbaude@redhat.com>2018-10-23 13:21:33 -0500
commit318e33ce2cf1a0bea6b32894b8c3ac768dfb1200 (patch)
treecffc3566b999b9a9daec9e24333266d0643f8f66
parentd043ac4de52d1bab07aca98487792e6b4d3d4689 (diff)
downloadpodman-318e33ce2cf1a0bea6b32894b8c3ac768dfb1200.tar.gz
podman-318e33ce2cf1a0bea6b32894b8c3ac768dfb1200.tar.bz2
podman-318e33ce2cf1a0bea6b32894b8c3ac768dfb1200.zip
read conmon output and convert to json in two steps
when reading the output from conmon using the JSON methods, it appears that JSON marshalling is higher in pprof than it really is because the pipe is "waiting" for a response. this gives us a clearer look at the real CPU/time consumers. Signed-off-by: baude <bbaude@redhat.com>
-rw-r--r--libpod/oci.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/libpod/oci.go b/libpod/oci.go
index 2257cd42f..ca8f967c4 100644
--- a/libpod/oci.go
+++ b/libpod/oci.go
@@ -1,6 +1,7 @@
package libpod
import (
+ "bufio"
"bytes"
"encoding/json"
"fmt"
@@ -418,7 +419,12 @@ func (r *OCIRuntime) createOCIContainer(ctr *Container, cgroupParent string, res
ch := make(chan syncStruct)
go func() {
var si *syncInfo
- if err = json.NewDecoder(parentPipe).Decode(&si); err != nil {
+ rdr := bufio.NewReader(parentPipe)
+ b, err := rdr.ReadBytes('\n')
+ if err != nil {
+ ch <- syncStruct{err: err}
+ }
+ if err := json.Unmarshal(b, &si); err != nil {
ch <- syncStruct{err: err}
return
}