This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
Bab's profile picture

Quarry turtle and Tree farm turtle both go too long without yielding, can't find cause

Started by Bab, 16 January 2014 - 04:40 AM
Bab #1
Posted 16 January 2014 - 05:40 AM
Hello people,

I've been busying myself making programs for computercraft for a couple of months now, but in two of my programs there seems to be a bug that I cannot squash.
I have a network set up with a central host computer displaying the status of all turtles attached to it via wireless modems, both on a screen and on OpenPeripherals' Terminal Glasses. This works fine.
However, two of the turtles attached to it, which run 24/7, crash after an undetermined amount of time because they went on too long without yielding.
The error never drops a line and wipes the file the turtles use to keep their progress.
The two programs can be found here:
Quarry:
http://pastebin.com/8wZjexV3
Tree Farm:
http://pastebin.com/pYtcjytq

If I made a really dumb mistake then I'm sorry for wasting your time.
If not, please help me out!
karelmikie3 #2
Posted 16 January 2014 - 01:36 PM
did you miss a sleep in the quarry and/of ping function, i don't have time to check the code right now, just a surgestion
Bab #3
Posted 16 January 2014 - 05:06 PM
There are sleep(0)'s in every single loop, I checked it multiple times.
Lyqyd #4
Posted 16 January 2014 - 06:07 PM
They're not in every loop. They're also not necessary in most of the loops, if they're even necessary in any of them. These programs are designed rather oddly.
Bab #5
Posted 17 January 2014 - 12:58 AM
Oddly in what way? If you mean the way the whole thing loops, it's kind of an artifact from a long time ago when I first wrote it to be compatible with my server program, as the main function couldn't be executed for long.
Even so, I still don't understand why it crashes for not yielding if they do yield when necessary.
Lyqyd #6
Posted 17 January 2014 - 01:32 AM
An excessively low tick rate server can cause it, or a slow computer if playing singleplayer.
Bab #7
Posted 17 January 2014 - 04:20 AM
I host the server on my own gaming computer, running a tweaked FTB Unleashed with GregTech. I very rarely, if at all, get messages about the server not keeping up, nor do I get lag while playing. Is there an easy way to see if I cross that limit?

Edit: by the way, they don't crash at the same time; most of the time, one crashes while the other works as it should.

Edit 2: The tree farm turtle managed to kill the main thread of computercraft, taking several completely unrelated turtles down with it. What did I do?

As I couldn't find any rule against thread bumping…
Bump.
Edited on 20 January 2014 - 06:41 PM
H4X0RZ #8
Posted 20 January 2014 - 06:23 PM
Maybe there is recursive calling in ping() or treefarm(). Don't have enough time to analyse the code, sorry…
Bab #9
Posted 21 January 2014 - 06:17 AM
No, I'm not calling ping(), treeFarm() or any other function in itself. Thanks for the suggestion though.
Thing is, it works for hours on end when it suddenly decides to stop.
CoLDarkness #10
Posted 21 January 2014 - 07:43 AM
Don't have enough time to analyse the code, sorry…
^
This occured to me once.

Make sure you put sleep(0) in the loops and make sure they are positioned like this:


while true do
-- Code
-- Code
-- Something else
AnotherResourceConsumingHugeLoop()
sleep(0)
-- code
-- code
-- code
end

This is how I fixed it.
Bab #11
Posted 21 January 2014 - 09:02 AM
I just went through all loops in the program, couldn't find any of those cases.