lttng: Bug 498066: Check if field ret exists in syscall exit handler
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Mon, 18 Jul 2016 14:49:23 +0000 (10:49 -0400)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Mon, 18 Jul 2016 19:05:58 +0000 (15:05 -0400)
Change-Id: I25dbd7534cafc20b0ad96e9dc73933d4ae71ab51
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/77477
Reviewed-by: Hudson CI
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
analysis/org.eclipse.tracecompass.analysis.os.linux.core/src/org/eclipse/tracecompass/internal/analysis/os/linux/core/inputoutput/handlers/SysExitHandler.java

index ec356067f012053036cfa8fc7830673f49bab852..7b53824e550570ce854616960448bc6836f53349 100644 (file)
@@ -63,7 +63,6 @@ public class SysExitHandler extends KernelEventHandler {
             return;
         }
 
-        int ret = ((Long) content.getField(getLayout().fieldSyscallRet()).getValue()).intValue();
         /* TODO: Why save the syscall before if we have it in the sys_exit? */
         int syscallQuark = ss.optQuarkRelative(InputOutputStateProvider.getNodeSyscalls(ss), String.valueOf(tid));
         if (syscallQuark == ITmfStateSystem.INVALID_ATTRIBUTE) {
@@ -71,17 +70,21 @@ public class SysExitHandler extends KernelEventHandler {
         }
         ITmfStateValue currentSyscall = ss.queryOngoingState(syscallQuark);
         String syscallValue = currentSyscall.unboxStr();
-        if (ret >= 0) {
-            if (fSyscallReadPattern.matcher(syscallValue).matches()) {
-                int currentProcessNode = ss.getQuarkRelativeAndAdd(InputOutputStateProvider.getNodeThreads(ss), String.valueOf(tid));
-                int readQuark = ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_READ);
-                ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_WRITTEN);
-                StateSystemBuilderUtils.incrementAttributeInt(ss, ts, readQuark, ret);
-            } else if (fSyscallWritePattern.matcher(syscallValue).matches()) {
-                int currentProcessNode = ss.getQuarkRelativeAndAdd(InputOutputStateProvider.getNodeThreads(ss), String.valueOf(tid));
-                ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_READ);
-                int writtenQuark = ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_WRITTEN);
-                StateSystemBuilderUtils.incrementAttributeInt(ss, ts, writtenQuark, ret);
+        Long retValue = content.getFieldValue(Long.class, getLayout().fieldSyscallRet());
+        if (retValue != null) {
+            int ret = retValue.intValue();
+            if (ret >= 0) {
+                if (fSyscallReadPattern.matcher(syscallValue).matches()) {
+                    int currentProcessNode = ss.getQuarkRelativeAndAdd(InputOutputStateProvider.getNodeThreads(ss), String.valueOf(tid));
+                    int readQuark = ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_READ);
+                    ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_WRITTEN);
+                    StateSystemBuilderUtils.incrementAttributeInt(ss, ts, readQuark, ret);
+                } else if (fSyscallWritePattern.matcher(syscallValue).matches()) {
+                    int currentProcessNode = ss.getQuarkRelativeAndAdd(InputOutputStateProvider.getNodeThreads(ss), String.valueOf(tid));
+                    ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_READ);
+                    int writtenQuark = ss.getQuarkRelativeAndAdd(currentProcessNode, Attributes.BYTES_WRITTEN);
+                    StateSystemBuilderUtils.incrementAttributeInt(ss, ts, writtenQuark, ret);
+                }
             }
         }
         TmfStateValue value = TmfStateValue.nullValue();
This page took 0.027874 seconds and 5 git commands to generate.