summaryrefslogtreecommitdiffstats
path: root/libssh/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'libssh/server.c')
-rw-r--r--libssh/server.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libssh/server.c b/libssh/server.c
index efb3220..87bb3ab 100644
--- a/libssh/server.c
+++ b/libssh/server.c
@@ -908,17 +908,23 @@ int ssh_execute_message_callbacks(ssh_session session){
if(!session->ssh_message_list)
return SSH_OK;
if(session->ssh_message_callback){
- while((msg=ssh_list_get_head(ssh_message , session->ssh_message_list)) != NULL){
+ while(ssh_list_get_head(ssh_message , session->ssh_message_list) != NULL){
+ msg=ssh_message_pop_head(session);
ret=session->ssh_message_callback(session,msg);
if(ret==1){
ret = ssh_message_reply_default(msg);
+ ssh_message_free(msg);
if(ret != SSH_OK)
return ret;
+ } else {
+ ssh_message_free(msg);
}
}
} else {
- while((msg=ssh_list_get_head(ssh_message , session->ssh_message_list)) != NULL){
+ while(ssh_list_get_head(ssh_message , session->ssh_message_list) != NULL){
+ msg=ssh_message_pop_head(session);
ret = ssh_message_reply_default(msg);
+ ssh_message_free(msg);
if(ret != SSH_OK)
return ret;
}