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

Commit ebca5eec authored by Jason Sams's avatar Jason Sams Committed by Android Git Automerger
Browse files

am 83665194: Merge change I9d5e03db into eclair

Merge commit '83665194' into eclair-mr2

* commit '83665194':
  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 2e6e80b9 83665194
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