summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorrofl0r <retnyg@gmx.net>2011-08-10 01:44:47 +0200
committerAndreas Schneider <asn@cryptomilk.org>2011-08-10 18:37:14 +0200
commitd08554dabd6e648505d3318886ca9e1671234a89 (patch)
treeced25a919dd10f98f024e3d5bdad93c12d88cb15 /src
parentcbe8f8b7609270b8921c341a3193f11c6497f6a1 (diff)
session: Fix an infinite loop in the termination callback.
This happened due to the use of the buggy and obsolete timeout funtions. (cherry picked from commit 7949f2cdc6eb1ac0f076e06e6a3fa47540a9b870)
Diffstat (limited to 'src')
-rw-r--r--src/session.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/src/session.c b/src/session.c
index 2975c1a4..4f0ef1e8 100644
--- a/src/session.c
+++ b/src/session.c
@@ -492,23 +492,17 @@ int ssh_handle_packets(ssh_session session, int timeout) {
* @return SSH_OK on success, SSH_ERROR otherwise.
*/
int ssh_handle_packets_termination(ssh_session session, int timeout,
- ssh_termination_function fct, void *user){
- int ret = SSH_ERROR;
- struct ssh_timestamp ts;
- ssh_timestamp_init(&ts);
-
- while(!fct(user)){
- ret = ssh_handle_packets(session, timeout);
- if(ret == SSH_ERROR)
- return SSH_ERROR;
- if(fct(user)) {
- return SSH_OK;
- } else if (ssh_timeout_elapsed(&ts, timeout)) {
- return SSH_AGAIN;
- }
- timeout = ssh_timeout_update(&ts,timeout);
- }
- return ret;
+ ssh_termination_function fct, void *user){
+ int ret = SSH_OK;
+
+ while(!fct(user)){
+ ret = ssh_handle_packets(session, timeout);
+ if(ret == SSH_ERROR || ret == SSH_AGAIN)
+ return ret;
+ if(fct(user))
+ return SSH_OK;
+ }
+ return ret;
}
/**