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

Commit 83665194 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I9d5e03db into eclair

* changes:
  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.
parents c6e88afb 9d5e03db
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