From e82c358c7179b864c48e56306fc454d8dd20680f Mon Sep 17 00:00:00 2001 From: Kevin Parsons Date: Mon, 7 Jan 2019 15:49:09 -0800 Subject: [PATCH] Support ETW events with no data fields --- internal/etw/provider.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/internal/etw/provider.go b/internal/etw/provider.go index c413351..d37e0fe 100644 --- a/internal/etw/provider.go +++ b/internal/etw/provider.go @@ -202,7 +202,15 @@ func (provider *Provider) WriteEvent(name string, eventOpts []EventOpt, fieldOpt opt(em, ed) } - return provider.WriteEventRaw(descriptor, [][]byte{em.Bytes()}, [][]byte{ed.Bytes()}) + // Don't pass a data blob if there is no event data. There will always be + // event metadata (e.g. for the name) so we don't need to do this check for + // the metadata. + dataBlobs := [][]byte{} + if len(ed.Bytes()) > 0 { + dataBlobs = [][]byte{ed.Bytes()} + } + + return provider.WriteEventRaw(descriptor, [][]byte{em.Bytes()}, dataBlobs) } // WriteEventRaw writes a single ETW event from the provider. This function is