aboutsummaryrefslogtreecommitdiff
path: root/src/ccapi/server/ccs_callback.c
diff options
context:
space:
mode:
authorAlexandra Ellwood <lxs@mit.edu>2007-07-25 19:29:39 +0000
committerAlexandra Ellwood <lxs@mit.edu>2007-07-25 19:29:39 +0000
commite623c00ce9df3580e6eb1b0337fe1d9727fb61e6 (patch)
treed1a3fdad976a0e3084833eedd6fd164b20adf419 /src/ccapi/server/ccs_callback.c
parentffb9fc8c748b864a3404500f5298041be4bb01c1 (diff)
downloadkrb5-e623c00ce9df3580e6eb1b0337fe1d9727fb61e6.zip
krb5-e623c00ce9df3580e6eb1b0337fe1d9727fb61e6.tar.gz
krb5-e623c00ce9df3580e6eb1b0337fe1d9727fb61e6.tar.bz2
Added callback support for wait_for_change functions
ticket: 4644 status: open git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19731 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/ccapi/server/ccs_callback.c')
-rw-r--r--src/ccapi/server/ccs_callback.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/src/ccapi/server/ccs_callback.c b/src/ccapi/server/ccs_callback.c
index 8035e5a..1076d90 100644
--- a/src/ccapi/server/ccs_callback.c
+++ b/src/ccapi/server/ccs_callback.c
@@ -102,29 +102,30 @@ cc_int32 ccs_callback_new (ccs_callback_t *out_callback,
cc_int32 ccs_callback_release (ccs_callback_t io_callback)
{
cc_int32 err = ccNoError;
- ccs_client_t client = NULL;
-
- if (!io_callback) { err = cci_check_error (ccErrBadParam); }
- if (!err && 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) {
- 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);
+ 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) {
+ 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);
+ }
}
return cci_check_error (err);
@@ -157,6 +158,8 @@ cc_int32 ccs_callback_reply_to_client (ccs_callback_t io_callback,
if (!err) {
if (io_callback->pending) {
+ cci_debug_printf ("%s: callback %p replying to client.", __FUNCTION__, io_callback);
+
err = ccs_server_send_reply (io_callback->reply_pipe, err, in_stream);
if (err) {