cc_int32 ccs_callback_release (ccs_callback_t io_callback) { cc_int32 err = ccNoError; if (!err && io_callback) { ccs_client_t client = NULL; if (io_callback->pending) { err = ccs_server_send_reply (io_callback->reply_pipe, io_callback->invalid_object_err, NULL); io_callback->pending = 0; } if (!err) { err = ccs_server_client_for_pipe (io_callback->client_pipe, &client); } if (!err && client) { /* if client object still has a reference to us, remove it */ err = ccs_client_remove_callback (client, io_callback); } if (!err) { ccs_pipe_release (io_callback->client_pipe); ccs_pipe_release (io_callback->reply_pipe); free (io_callback); } ccs_server_unref(); } return cci_check_error (err); }
static cc_int32 ccs_list_iterator_object_release (cci_array_object_t io_list_iterator) { cc_int32 err = ccNoError; ccs_list_iterator_t list_iterator = (ccs_list_iterator_t) io_list_iterator; if (!io_list_iterator) { err = ccErrBadParam; } if (!err && ccs_pipe_valid (list_iterator->client_pipe)) { ccs_client_t client = NULL; err = ccs_server_client_for_pipe (list_iterator->client_pipe, &client); if (!err && client) { /* if client object still has a reference to us, remove it */ err = ccs_client_remove_iterator (client, list_iterator); } } if (!err) { ccs_pipe_release (list_iterator->client_pipe); cci_identifier_release (list_iterator->identifier); free (io_list_iterator); } return err; }
cc_int32 ccs_list_iterator_invalidate (ccs_list_iterator_t io_list_iterator) { cc_int32 err = ccNoError; ccs_list_iterator_t list_iterator = (ccs_list_iterator_t) io_list_iterator; if (!io_list_iterator) { err = ccErrBadParam; } if (!err) { /* Client owner died. Remove client reference and then the iterator. */ if (ccs_pipe_valid (list_iterator->client_pipe)) { ccs_pipe_release (list_iterator->client_pipe); list_iterator->client_pipe = CCS_PIPE_NULL; } err = ccs_list_iterator_release (io_list_iterator); } return err; }