Ember+ Viewer, sometimes sends propery write out of the blue

103 views
Skip to first unread message

Stian Skjelstad

unread,
May 7, 2018, 3:40:57 AM5/7/18
to ember-plus-discuss
When you double-click a Property (integer one), the viewer expands and unexpands the node. This causes the viewer to emit messages that it wants to read the tree, which is good. But every now and then, it sends a write message instead, setting the value to 1. I have double-clicked on Timeout, many times, and suddently I received a write-message





Breakpoint 1, telnet_submit_command_sync (command=0x1a16a0 "[port.8]\noutput.autosource.timeout=1\n", acknak=2) at telnet.c:422
422             int length = strlen (command);
(gdb) bt
#0  telnet_submit_command_sync (command=0x1a16a0 "[port.8]\noutput.autosource.timeout=1\n", acknak=2) at telnet.c:422
#1  0x00013f34 in AutoChange_Timeout_OnWrite (pValue=0x61ed0, state=0x11a5a8) at section-port.c:157
#2  0x000098d4 in onParameter (pParameter=0x61ec8, fields=GlowFieldFlag_Value, pPath=0x61e44, pathLength=6, state=0x1a1338) at client.c:200
#3  0x0002400c in onItemReady_ParameterContents (pThis=0x61e00) at ../externals/ember-plus/libember_slim/Source/glowrx.c:344
#4  0x00026a34 in onItemReady (pBase=0x61e00) at ../externals/ember-plus/libember_slim/Source/glowrx.c:1187
#5  0x00021398 in endContainer (pThis=0x61e00) at ../externals/ember-plus/libember_slim/Source/emberasyncreader.c:359
#6  0x00021650 in emberAsyncReader_readByte (pThis=0x61e00, b=1 '\001') at ../externals/ember-plus/libember_slim/Source/emberasyncreader.c:465
#7  0x000216b8 in emberAsyncReader_readBytes (pThis=0x61e00, pBytes=0x1a191b "\001(\206\001 S,", count=1) at ../externals/ember-plus/libember_slim/Source/emberasyncreader.c:474
#8  0x00026e60 in onPackageReceived (pPackage=0x1a18b9 "", length=99, state=0x61e00) at ../externals/ember-plus/libember_slim/Source/glowrx.c:1315
#9  0x00022414 in readFramedByte (pThis=0x61fc8, b=255 '\377') at ../externals/ember-plus/libember_slim/Source/emberframing.c:451
#10 0x00022600 in emberFramingReader_readBytes (pThis=0x61fc8, pBytes=0xbeffeffb "\377 S,\377\377\311\377\266\004", count=1) at ../externals/ember-plus/libember_slim/Source/emberframing.c:530
#11 0x00027038 in glowReader_readBytes (pThis=0x61e00, pBytes=0xbeffef94 "\376", count=104) at ../externals/ember-plus/libember_slim/Source/glowrx.c:1379
#12 0x00009ac4 in client_callback (data=0x1a1338, revents=1) at client.c:247
#13 0x0000b4f0 in main_loop_fd_iterate (timeout_ms=-1) at main-loop.c:193
#14 0x0000ad4c in main (argc=2, argv=0xbefff344) at main.c:229
(gdb) up
#1  0x00013f34 in AutoChange_Timeout_OnWrite (pValue=0x61ed0, state=0x11a5a8) at section-port.c:157
157                     telnet_submit_command_sync (buffer, 2);
(gdb) up
#2  0x000098d4 in onParameter (pParameter=0x61ec8, fields=GlowFieldFlag_Value, pPath=0x61e44, pathLength=6, state=0x1a1338) at client.c:200
200                             pCursor->onParameterWrite (&pParameter->value, pCursor->OnParameterWriteState);
(gdb) set print pretty
(gdb) p *pParameter
$1 = {
  pIdentifier = 0x0,
  pDescription = 0x0,
  value = {
    flag = GlowParameterType_Integer,
    choice = {
      integer = 1,
      real = 4.9406564584124654e-324,
      boolean = 1,
      pString = 0x1 <Address 0x1 out of bounds>,
      octets = {
        pOctets = 0x1 <Address 0x1 out of bounds>,
        length = 0
      }
    }
  },
  defaultValue = {
    flag = GlowParameterType_None,
    choice = {
      integer = 0,
      real = 0,
      boolean = 0,
      pString = 0x0,
      octets = {
        pOctets = 0x0,
        length = 0
      }
    }
  },
  minimum = {
    flag = GlowParameterType_None,
    choice = {
      integer = 0,
      real = 0
    }
  },
  maximum = {
    flag = GlowParameterType_None,
    choice = {
      integer = 0,
      real = 0
    }
  },
  access = GlowAccess_None,
  pFormat = 0x0,
  factor = 0,
  isOnline = 0,
  step = 0,
  type = GlowParameterType_None,
  streamIdentifier = 0,
  streamDescriptor = {
    format = GlowStreamFormat_UnsignedInt8,
    offset = 0
  },
  pFormula = 0x0,
  pEnumeration = 0x0,
  pSchemaIdentifiers = 0x0,
  pTemplateReference = 0x0,
  templateReferenceLength = 0
}
(gdb) l
195                     send(sock, (char *)pBuffer, glowOutput_finishPackage(&output), 0);
196                     freeMemory(pBuffer);
197     #else
198                     if (pParameter->value.flag == pCursor->param.value.flag)
199                     {
200*                            pCursor->onParameterWrite (&pParameter->value, pCursor->OnParameterWriteState);
201                     } else {
202                             fprintf (stderr, "onParameter, datatype missmatch: received flag = %d, local flag = %d\n", pParameter->value.flag, pCursor->param.value.flag);
203                     }
204     #endif
(gdb) up
#3  0x0002400c in onItemReady_ParameterContents (pThis=0x61e00) at ../externals/ember-plus/libember_slim/Source/glowrx.c:344
344              pThis->onParameter(&pThis->glow.parameter, pThis->fields, pThis->path, pThis->pathLength, pThis->state);
(gdb) l
339        const BerTag *pTag = &pBase->tag;
340
341        if(pBase->isContainer)
342        {
343           if(pThis->onParameter != NULL)
344*             pThis->onParameter(&pThis->glow.parameter, pThis->fields, pThis->path, pThis->pathLength, pThis->state);
345
346           // reset read parameter
347           glowParameter_free(&pThis->glow.parameter);
348           pThis->fields = GlowFieldFlag_None;
(gdb) p *pThis
$2 = {
  base = {
    base = {
      tag = {
        preamble = 128 '\200',
        number = 1
      },
      length = 5,
      type = 17,
      isContainer = 1,
      outerLength = 0,
      buffer = {
        pMemory = 0x198f60 "\001$\345\266\220\062\345\266\064;stderr\030",
        size = 16,
        position = 0,
        isDynamic = 1
      }
    },
    decodeState = DecodeState_Tag,
    pContainerStack = 0x1b28c8,
    pCurrentContainer = 0x1b29e8,
    bytesRead = 0,
    bytesExpected = 0,
    onNewContainer = 0x26aec <onNewContainer>,
    onItemReady = 0x269fc <onItemReady>
  },
  path = {0, 1, 108, 400, 2808, 3108, 0 <repeats 26 times>},
  pathLength = 6,
  glow = {
    node = {
      pIdentifier = 0x0,
      pDescription = 0x0,
      isRoot = 1,
      isOnline = 0,
      pSchemaIdentifiers = 0x1 <Address 0x1 out of bounds>,
      pTemplateReference = 0x0,
      templateReferenceLength = 0
    },
    parameter = {
      pIdentifier = 0x0,
      pDescription = 0x0,
      value = {
        flag = GlowParameterType_Integer,
        choice = {
          integer = 1,
          real = 4.9406564584124654e-324,
          boolean = 1,
          pString = 0x1 <Address 0x1 out of bounds>,
          octets = {
            pOctets = 0x1 <Address 0x1 out of bounds>,
            length = 0
          }
        }
      },
      defaultValue = {
        flag = GlowParameterType_None,
        choice = {
          integer = 0,
          real = 0,
          boolean = 0,
          pString = 0x0,
          octets = {
            pOctets = 0x0,
            length = 0
          }
        }
      },
      minimum = {
        flag = GlowParameterType_None,
        choice = {
          integer = 0,
          real = 0
        }
      },
      maximum = {
        flag = GlowParameterType_None,
        choice = {
          integer = 0,
          real = 0
        }
      },
      access = GlowAccess_None,
      pFormat = 0x0,
      factor = 0,
      isOnline = 0,
      step = 0,
      type = GlowParameterType_None,
      streamIdentifier = 0,
      streamDescriptor = {
        format = GlowStreamFormat_UnsignedInt8,
        offset = 0
      },
      pFormula = 0x0,
      pEnumeration = 0x0,
      pSchemaIdentifiers = 0x0,
      pTemplateReference = 0x0,
      templateReferenceLength = 0
    },
    command = {
      number = 0,
      options = {
        dirFieldMask = GlowFieldFlag_Identifier,
        invocation = {
          invocationId = 1,
          pArguments = 0x0,
          argumentsLength = 1
        }
      }
    },
    streamEntry = {
      streamIdentifier = 0,
      streamValue = {
        flag = GlowParameterType_Integer,
        choice = {
          integer = 1,
          real = 4.9406564584124654e-324,
          boolean = 1,
          pString = 0x1 <Address 0x1 out of bounds>,
          octets = {
            pOctets = 0x1 <Address 0x1 out of bounds>,
            length = 0
          }
        }
      }
    },
    matrix = {
      pIdentifier = 0x0,
      pDescription = 0x0,
      type = GlowMatrixType_OneToOne,
      addressingMode = GlowMatrixAddressingMode_Linear,
      targetCount = 1,
      sourceCount = 0,
      maximumTotalConnects = 0,
      maximumConnectsPerTarget = 0,
      parametersLocation = {
        kind = GlowParametersLocationKind_BasePath,
        choice = {
          basePath = {
            ids = {0 <repeats 32 times>},
            length = 0
          },
          inlineId = 0
        }
      },
      pLabels = 0x0,
      labelsLength = 0,
      pSchemaIdentifiers = 0x0,
      pTemplateReference = 0x0,
      templateReferenceLength = 0
    },
    signal = {
      number = 0
    },
    connection = {
      target = 0,
      pSources = 0x0,
      sourcesLength = 1,
      operation = GlowConnectionOperation_Absolute,
      disposition = GlowConnectionDisposition_Modified
    },
    function = {
      pIdentifier = 0x0,
      pDescription = 0x0,
      pArguments = 0x1,
      argumentsLength = 0,
      pResult = 0x1,
      resultLength = 0,
      pTemplateReference = 0x0,
      templateReferenceLength = 0
    },
    invocationResult = {
      invocationId = 0,
      hasError = 0,
      pResult = 0x1,
      resultLength = 0
    },
    template_ = {
      pDescription = 0x0,
      state = 0
    }
  },
  fields = GlowFieldFlag_Value,
  onItemReadyState = 0x23f6c <onItemReady_ParameterContents>,
  onTemplate = 0,
  onNode = 0,
  onParameter = 0x982c <onParameter>,
  onCommand = 0x9368 <onCommand>,
  onStreamEntry = 0,
  onMatrix = 0,
  onTarget = 0,
  onSource = 0,
  onConnection = 0,
  onFunction = 0,
  onInvocationResult = 0,
  onUnsupportedTltlv = 0,
  state = 0x1a1338
}

Reply all
Reply to author
Forward
0 new messages