diff options
author | Alexandra Ellwood <lxs@mit.edu> | 2007-07-25 19:29:39 +0000 |
---|---|---|
committer | Alexandra Ellwood <lxs@mit.edu> | 2007-07-25 19:29:39 +0000 |
commit | e623c00ce9df3580e6eb1b0337fe1d9727fb61e6 (patch) | |
tree | d1a3fdad976a0e3084833eedd6fd164b20adf419 /src/ccapi/server/ccs_callback.c | |
parent | ffb9fc8c748b864a3404500f5298041be4bb01c1 (diff) | |
download | krb5-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.c | 47 |
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) { |