static ceval_events_t* new_cevents(PyThreadState* tstate) { ceval_events_t* cev; PyObject* dict = tstate->dict; RECLIMIT_SAFE_ENTER(); if (dict == NULL) { dict = tstate->dict = PyDict_New(); if (dict == NULL) OUT_OF_MEMORY(); } cev = PyCStruct_NEW(ceval_events_t, ceval_events_dealloc); /*cev->lock = PyThread_allocate_lock();*/ memset(cev->events, 0, sizeof(cev->events)); cev->tstate = tstate; cev->events_total = 0; cev->current_hook = 0; if (PyDict_SetItem(dict, ceval_events_key, (PyObject*) cev)) OUT_OF_MEMORY(); RECLIMIT_SAFE_LEAVE(); Py_DECREF(cev); /* one ref left in dict */ return cev; }
DEFINEFN PyCodeStats* PyCodeStats_Get(PyCodeObject* co) { PyCodeStats* cs; RECLIMIT_SAFE_ENTER(); cs = (PyCodeStats*) PyCStruct_DictGet(codestats_dict, (PyObject*) co); if (cs == NULL) { cs = PyCStruct_NEW(PyCodeStats, PyCodeStats_dealloc); Py_INCREF(co); cs->cs_key = (PyObject*) co; cs->st_charge = 0.0f; cs->st_mergepoints = NULL; cs->st_codebuf = NULL; cs->st_globals = NULL; if (PyDict_SetItem(codestats_dict, (PyObject*) cs, (PyObject*) cs) < 0) OUT_OF_MEMORY(); Py_DECREF(cs); /* two references left in codestats_dict */ } RECLIMIT_SAFE_LEAVE(); return cs; }