Mantis Bug Tracker

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0008135opensim[REGION] Script Functionspublic2017-03-04 23:012017-06-06 12:22
ReporterKayaker Magic 
Assigned ToUbitUmarov 
PrioritynormalSeverityminorReproducibilityalways
StatusresolvedResolutionfixed 
PlatformUnix monoOSOpen Simulator 0.9.1OS Version0.9.1
Product Versionmaster (dev code) 
Target VersionFixed in Version 
Summary0008135: llListen starts to fail after it is used > 720 times in temp rez objects
DescriptionWhen you rez a lot of temp-rez objects, and every one of these objects opens a llListen channel, listens for one message, then closes the channel, it works for a while. Yes, I am calling llListenRemove on every single one, even putting in a timer to remove the listen even if no message ever arrives. After a few minutes some system resource becomes exhausted and the calls to llListen fail and return -1. Other scripts in the same region that depend on llListen then start to fail. Even if you stop rezzing new objects that call llListen, the server never recovers and llListen calls all over the region still fail half the time. The only way to make llListen reliable again is to restart the simulator.

I pulled the latest version of OpenSim from git, compiled it and did this test. It fails after 6 minutes. I tried the test on Kitely with OpenSim 0.8.2 AND THIS TEST FAILED THERE after about the same 6 minutes. I conclude that this is an old bug!

Please note that I already stated above that every llListen channel is llListenRemoved shortly after use. The problem is NOT having too many llListen channels open at once.

I tried to reproduce the problem with one script in one prim that opens and removes llListen channels continuously, and the problem does not happen in this case.
Steps To ReproducePut the following “listen” script in a prim and name it the prim listener. Mark the prim temporary and phantom if you like but the script will do that for you if you forget. Put the following “rezzer” script in a second prim and name that one rezzer. Put a copy of the listener prim in the rezzer. Click on the rezzer to start the test. Wait for 5 or 6 minutes. Everything will appear to work fine, but after a while calls to llListen will start to fail.
Additional Information//***************************************************
//listener for llListen failure test
//put this script in a first prim,
//put the first prim in a second prim with the rezzer script
integer handle;
default
{
    on_rez(integer params)
    {
        if (params != 0) //perform test when param is 1
        {
            llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_TEMP_ON_REZ,1]);
            llSetStatus(STATUS_PHANTOM,TRUE);
            handle=llListen(-100000,"","","");
            if (handle <=0)
            {
                llOwnerSay("llListen FAIL! "+(string)handle);
                llDie();
            }
            else
                llSetTimerEvent(1.0);
        }
    }
    timer()
    {
        llOwnerSay("removing");
        llListenRemove(handle);
        llDie();
    }
    
}

//*******************************************************
//rezzer for llListen failure test
// put this script in a second prim,
// put the listener script in a first prim and put a copy
// of the first prim in the inventory next to this script in the second prim
// click on the second prim to start the test.
// It takes 6 minutes for some resource to be exhausted,
// then the simulator never recovers and must be restarted to
// get llListens reliable again
integer mode=0;
default
{
    touch_start(integer num)
    {
        if (mode==0)
            llSetTimerEvent(0.5); //rez until you drop
        else
            llSetTimerEvent(0.0);
        mode = mode^1;
    }
    timer()
    {
        llRezObject(
            llGetInventoryName(INVENTORY_OBJECT,0), //first object in inventory
            llGetPos()+<llFrand(5.0)-2.5,llFrand(5.0)-2.5,1+llFrand(5.0)>, //random spot above the rezzer
            ZERO_VECTOR,ZERO_ROTATION,1);
    }
}

TagsNo tags attached.
Git Revision or version number
Run Mode Grid (1 Region per Sim)
Physics EngineBulletSim
EnvironmentMono / Linux64
Mono Version3.0
ViewerFireStorm
Attached Files

- Relationships

-  Notes
(0031620)
Kayaker Magic (reporter)
2017-03-07 11:46

I tried doing the test again with rezzed objects that were not temp rez, and it still failed after 0000010:0000006 minutes. So temp rez is not the issue.
(0031816)
UbitUmarov (administrator)
2017-05-02 07:23

yes it does seem a old issue
change master on this
(0031996)
Kayaker Magic (reporter)
2017-06-06 12:20

I tested this on 0.9.1.0 Dev (Unix/Mono)
git hash: c28430d52771ed6950e8482095a72ee8ef0c168d

I ran the test script for an hour with no llListen failures!

- Issue History
Date Modified Username Field Change
2017-03-04 23:01 Kayaker Magic New Issue
2017-03-07 11:46 Kayaker Magic Note Added: 0031620
2017-05-02 07:23 UbitUmarov Note Added: 0031816
2017-05-27 14:45 UbitUmarov Assigned To => UbitUmarov
2017-05-27 14:45 UbitUmarov Status new => feedback
2017-06-06 12:20 Kayaker Magic Note Added: 0031996
2017-06-06 12:20 Kayaker Magic Status feedback => assigned
2017-06-06 12:20 Kayaker Magic Status assigned => feedback
2017-06-06 12:20 Kayaker Magic Resolution open => fixed
2017-06-06 12:22 UbitUmarov Status feedback => resolved


Copyright © 2000 - 2012 MantisBT Group
Powered by Mantis Bugtracker