Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d5e03db authored by Jason Sams's avatar Jason Sams
Browse files

Fix RS bugs. We were holding a pointer to the script text from the java vm....

Fix RS bugs.  We were holding a pointer to the script text from the java vm. Move freeing of objects to before context teardown to allow allocations to clean up their data.
parent c4918c30
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -54,6 +54,17 @@ Allocation::~Allocation()
{
    free(mPtr);
    mPtr = NULL;

    if (mBufferID) {
        // Causes a SW crash....
        //LOGV(" mBufferID %i", mBufferID);
        //glDeleteBuffers(1, &mBufferID);
        //mBufferID = 0;
    }
    if (mTextureID) {
        glDeleteTextures(1, &mTextureID);
        mTextureID = 0;
    }
}

void Allocation::setCpuWritable(bool)
+3 −2
Original line number Diff line number Diff line
@@ -342,6 +342,9 @@ void * Context::threadProc(void *vrsc)
     rsc->mStateFragmentStore.deinit(rsc);
     ObjectBase::zeroAllUserRef(rsc);

     rsc->mObjDestroy.mNeedToEmpty = true;
     rsc->objDestroyOOBRun();

     glClearColor(0,0,0,0);
     glClear(GL_COLOR_BUFFER_BIT);
     eglSwapBuffers(rsc->mEGL.mDisplay, rsc->mEGL.mSurface);
@@ -350,8 +353,6 @@ void * Context::threadProc(void *vrsc)
     rsc->deinitEGL();
     pthread_mutex_unlock(&gInitMutex);

     rsc->mObjDestroy.mNeedToEmpty = true;
     rsc->objDestroyOOBRun();
     LOGV("RS Thread exited");
     return NULL;
}
+1 −6
Original line number Diff line number Diff line
@@ -113,12 +113,7 @@ bool ObjectBase::decSysRef() const

void ObjectBase::setName(const char *name)
{
    delete mName;
    mName = NULL;
    if (name) {
        mName = new char[strlen(name) +1];
        strcpy(mName, name);
    }
    setName(name, strlen(name));
}

void ObjectBase::setName(const char *name, uint32_t len)
+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ public:
        ObjectBaseRef<ProgramRaster> mRaster;
        ObjectBaseRef<ProgramFragmentStore> mFragmentStore;
        InvokeFunc_t mInvokables[MAX_SCRIPT_BANKS];
        const char * mScriptText;
        char * mScriptText;
        uint32_t mScriptTextLength;
    };
    Enviroment_t mEnviroment;
+7 −1
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ ScriptC::~ScriptC()
    if (mAccScript) {
        accDeleteScript(mAccScript);
    }
    free(mEnviroment.mScriptText);
    mEnviroment.mScriptText = NULL;
}

void ScriptC::setupScript()
@@ -404,7 +406,11 @@ void rsi_ScriptCSetScript(Context * rsc, void *vp)
void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
{
    ScriptCState *ss = &rsc->mScriptC;
    ss->mScript->mEnviroment.mScriptText = text;

    char *t = (char *)malloc(len + 1);
    memcpy(t, text, len);
    t[len] = 0;
    ss->mScript->mEnviroment.mScriptText = t;
    ss->mScript->mEnviroment.mScriptTextLength = len;
}

Loading