Execution timeout running getLinkStatus()

I’m seeing a weird (to me) execution timeout when running some code that is launched from a timer. My timer code looks like:

m.deviceInfo = createObject("roDeviceInfo")

m.internetCheckTimer = createObject("roSGNode", "Timer")
m.internetCheckTimer.duration = 1
m.internetCheckTimer.repeat = true
m.internetCheckTimer.observeField("fire", "checkNetworkAvailable")
m.internetCheckTimer.control = "start"

and then the routine that gets called looks like:

sub checkNetworkAvailable()
    currentlyOffline = m.deviceInfo.getLinkStatus() = false
    print(currentlyOffline)
end sub

I’ve had a couple of reports from testers with a stack trace reporting an Execution Timeout on the line where I’m checking getLinkStatus() - I must admit I’m somewhat puzzled as to how that might cause an execution timeout. The only thing I can think of is that (maybe) there’s a rendesvouz timeout when accessing the m.deviceInfo variable? It isn’t used or referenced anywhere else, though, so that seems like a long shot.

Any thoughts would be greatly appreciated. Thanks a lot.


Craig

currentlyOffline = m.deviceInfo.getLinkStatus() = false
 

I don’t see how 2 equal signs is going to work.

That approach works fine, I use it all the time.
If the second part is true, the variable will be True, otherwise it will be False.
So if m.deviceInfo.getLinkStatus() = false is a true statement, then currentlyOffline will be True.
But I have no idea how getLinkStatus() works, so no help from me, sorry.

“Komag” wrote:
That approach works fine, I use it all the time.
If the second part is true, the variable will be True, otherwise it will be False.
So if m.deviceInfo.getLinkStatus() = false is a true statement, then currentlyOffline will be True.
But I have no idea how getLinkStatus() works, so no help from me, sorry.
Interesting. So putting a statement after the first = turns it all into a boolean?

I find it very useful:


FUNCTION saveItemDetails(Item, y, x, rm, inv = FALSE AS BOOLEAN)
 IF NOT inv THEN ItemA = [y, x, rm, Item.code] ELSE ItemA = [Item.code]
 
 stk = Item.inven <> INVALID AND Item.inven.stack <> INVALID AND Item.inven.stack > 1
 hth = Item.hth <> INVALID AND Item.hth < Item.max
 cnt = Item.contents <> INVALID AND Item.contents.Count() > 0
 dscr = Item.kind = "160 readable"
 br = Item.bid <> INVALID
 lit = br AND Item.bright > 0
 torch = Item.name = "torch" AND Item.fuel < m.sy.torchLife
 
 IF stk: ItemA.Push(0): ItemA.Push(Item.inven.stack): END IF
 IF hth: ItemA.Push(1): ItemA.Push(Item.hth): END IF
 IF cnt: ItemA.Push(2): ItemA.Push(saveContents(Item.contents)): END IF
 IF dscr: ItemA.Push(3): ItemA.Push(Item.dscr): END IF
 IF br: ItemA.Push(4): ItemA.Push(Item.bid.ToInt()): END IF
 IF lit: ItemA.Push(5): ItemA.Push(Item.bright): END IF
 IF torch: ItemA.Push(6): ItemA.Push(Item.fuel): END IF
 
 IF NOT inv
   frP = Item.frPlyr <> INVALID AND Item.frPlyr
   fac = Item.facing <> INVALID
   IF frP: ItemA.Push(7): ItemA.Push(1): END IF
   IF fac: ItemA.Push(8): ItemA.Push(Item.facing): END IF
 ELSE
   eqp = Item.inven.equipped <> INVALID AND Item.inven.equipped
   IF eqp: ItemA.Push(9): ItemA.Push(m.sy.eqC[Item.inven.eqSlot]): END IF
 END IF
 
 RETURN ItemA
END FUNCTION

So you are getting the Execution timeouts in which all devices? Also since you mentioned logs, i am assuming the testers are testing on a dev channel right rather than a private channel?

So you are getting the Execution timeouts in which all devices? Also since you mentioned logs, i am assuming the testers are testing on a dev channel right rather than a private channel?
Yup, all devices. And yes, this is currently via a sideloaded channel.
In the finish, I managed to work around it by removing the periodic polling of getLinkStatus(), and instead I watch for incoming roDeviceInfoEvent events in my runloop.