/* All of these are synthesized objects, so they're good. */
py_dec_optkeys = PyDict_Keys(py_dec_options);
num_optkeys = PyList_Size(py_dec_optkeys);
+
+ /*
+ * The 'options' dictionary is a class variable, but we need to
+ * change it. Changing it directly will affect the entire class,
+ * so we need to create a new object for it, and populate that
+ * instead.
+ */
if (!(py_di_options = PyObject_GetAttrString(di->py_inst, "options")))
goto err_out;
+ Py_DECREF(py_di_options);
+ py_di_options = PyDict_New();
+ PyObject_SetAttrString(di->py_inst, "options", py_di_options);
for (i = 0; i < num_optkeys; i++) {
/* Get the default class value for this option. */
py_str_as_str(PyList_GetItem(py_dec_optkeys, i), &key);
ret = SRD_OK;
err_out:
- Py_XDECREF(py_optlist);
Py_XDECREF(py_di_options);
Py_XDECREF(py_dec_optkeys);
Py_XDECREF(py_dec_options);
* @return Pointer to a newly allocated struct srd_decoder_inst, or
* NULL in case of failure.
*
- * @since 0.1.0
+ * @since 0.1.0 (the API changed in 0.3.0, though)
*/
SRD_API struct srd_decoder_inst *srd_inst_new(struct srd_session *sess,
const char *decoder_id, GHashTable *options)
*
* @return SRD_OK upon success, a (negative) error code otherwise.
*
- * @since 0.1.0
+ * @since 0.1.0 (the API changed in 0.3.0, though)
*/
SRD_API int srd_inst_stack(struct srd_session *sess,
struct srd_decoder_inst *di_from, struct srd_decoder_inst *di_to)
*
* @return Pointer to struct srd_decoder_inst, or NULL if not found.
*
- * @since 0.1.0
+ * @since 0.1.0 (the API changed in 0.3.0, though)
*/
SRD_API struct srd_decoder_inst *srd_inst_find_by_id(struct srd_session *sess,
const char *inst_id)
* A session holds all decoder instances, their stack relationships and
* output callbacks.
*
- * @param sess. A pointer which will hold a pointer to a newly
- * initialized session on return.
+ * @param sess A pointer which will hold a pointer to a newly
+ * initialized session on return.
*
* @return SRD_OK upon success, a (negative) error code otherwise.
*
*
* @return SRD_OK upon success, a (negative) error code otherwise.
*
- * @since 0.1.0
+ * @since 0.1.0 (the API changed in 0.3.0, though)
*/
SRD_API int srd_session_start(struct srd_session *sess)
{
ret = SRD_OK;
srd_dbg("Calling start() on all instances in session %d with "
- "%d probes, unitsize %d samplerate %d.", sess->session_id,
+ "%d probes, unitsize %d, samplerate %d.", sess->session_id,
sess->num_probes, sess->unitsize, sess->samplerate);
/*
*
* All decoder instances and output callbacks are properly released.
*
- * @param sess. The session to be destroyed.
+ * @param sess The session to be destroyed.
*
* @return SRD_OK upon success, a (negative) error code otherwise.
*
- * @since 0.1.0
+ * @since 0.3.0
*/
SRD_API int srd_session_destroy(struct srd_session *sess)
{
* @param cb The function to call. Must not be NULL.
* @param cb_data Private data for the callback function. Can be NULL.
*
- * @since 0.1.0
+ * @since 0.1.0 (the API changed in 0.3.0, though)
*/
SRD_API int srd_pd_output_callback_add(struct srd_session *sess,
int output_type, srd_pd_output_callback_t cb, void *cb_data)