]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - prvm_edict.c
Revert "note that in some cases, crypto_aeslevel changes need crypto_reload to apply...
[xonotic/darkplaces.git] / prvm_edict.c
index 5168b597566c225c2dd54cfd56d46022be2c31a4..25f9899af9f434cbbf1ee15af061596e5e9c72be 100644 (file)
@@ -1896,6 +1896,9 @@ void PRVM_Prog_Load(prvm_prog_t *prog, const char * filename, int numrequiredfun
        if (prog->loaded)
                prog->error_cmd("PRVM_LoadProgs: there is already a %s program loaded!", prog->name );
 
+       Host_LockSession(); // all progs can use the session cvar
+       Crypto_LoadKeys(); // all progs might use the keys at init time
+
        dprograms = (dprograms_t *)FS_LoadFile (filename, prog->progs_mempool, false, &filesize);
        if (dprograms == NULL || filesize < (fs_offset_t)sizeof(dprograms_t))
                prog->error_cmd("PRVM_LoadProgs: couldn't load %s for %s", filename, prog->name);
@@ -2973,13 +2976,16 @@ static qboolean PRVM_IsEdictReferenced(prvm_prog_t *prog, prvm_edict_t *edict, i
                if(!*targetname) // ""
                        targetname = NULL;
 
-       for (i = 0;i < prog->numglobaldefs;i++)
+       if(mark == 0)
        {
-               ddef_t *d = &prog->globaldefs[i];
-               if((etype_t)((int) d->type & ~DEF_SAVEGLOBAL) != ev_entity)
-                       continue;
-               if(edictnum == PRVM_GLOBALFIELDEDICT(d->ofs))
-                       return true;
+               for (i = 0;i < prog->numglobaldefs;i++)
+               {
+                       ddef_t *d = &prog->globaldefs[i];
+                       if((etype_t)((int) d->type & ~DEF_SAVEGLOBAL) != ev_entity)
+                               continue;
+                       if(edictnum == PRVM_GLOBALFIELDEDICT(d->ofs))
+                               return true;
+               }
        }
 
        for(j = 0; j < prog->num_edicts; ++j)
@@ -3082,6 +3088,8 @@ void PRVM_LeakTest(prvm_prog_t *prog)
                        Con_Print("\n");
                        leaked = true;
                }
+
+               ed->priv.required->mark = 0; // clear marks again when done
        }
 
        for (i = 0; i < (int)Mem_ExpandableArray_IndexRange(&prog->stringbuffersarray); ++i)