diff options
| author | Artyom V. Poptsov <poptsov.artyom@gmail.com> | 2016-08-19 12:36:45 +0400 |
|---|---|---|
| committer | Artyom V. Poptsov <poptsov.artyom@gmail.com> | 2016-08-19 12:36:45 +0400 |
| commit | a708e9c1121d9071fe1fae248468e5b780a3d96a (patch) | |
| tree | 02e292802a52cdc214263906120b7ee1f62bf939 | |
| parent | libguile-ssh/key-type.c (free_key_smob): Bugfix: Check smob type (diff) | |
| download | guile-ssh-a708e9c1121d9071fe1fae248468e5b780a3d96a.tar.gz | |
libguile-ssh: Bugfix: Check if smobs are already freed
* libguile-ssh/message-type.c (free_message): Bugfix: Check if the smob is
already freed, don't try to free it once more.
* libguile-ssh/server-type.c (free_server): Likewise.
* libguile-ssh/session-type.c (free_session): Likewise.
* libguile-ssh/sftp-session-type.c (free_sftp_session): Likewise.
| -rw-r--r-- | libguile-ssh/message-type.c | 5 | ||||
| -rw-r--r-- | libguile-ssh/server-type.c | 5 | ||||
| -rw-r--r-- | libguile-ssh/session-type.c | 5 | ||||
| -rw-r--r-- | libguile-ssh/sftp-session-type.c | 5 |
4 files changed, 20 insertions, 0 deletions
diff --git a/libguile-ssh/message-type.c b/libguile-ssh/message-type.c index 83d32b1..46b91f1 100644 --- a/libguile-ssh/message-type.c +++ b/libguile-ssh/message-type.c @@ -41,6 +41,11 @@ mark_message (SCM message) size_t free_message (SCM message) { + if (! SCM_SMOB_PREDICATE (message_tag, message)) + { + _ssh_log (SSH_LOG_FUNCTIONS, "free_message", "%s", "already freed"); + return 0; + } struct message_data *msg_data = _scm_to_message_data (message); ssh_message_free (msg_data->message); return 0; diff --git a/libguile-ssh/server-type.c b/libguile-ssh/server-type.c index ed2402f..5bb5e2e 100644 --- a/libguile-ssh/server-type.c +++ b/libguile-ssh/server-type.c @@ -41,6 +41,11 @@ mark_server (SCM server) size_t free_server (SCM server) { + if (! SCM_SMOB_PREDICATE (server_tag, server)) + { + _ssh_log (SSH_LOG_FUNCTIONS, "free_server", "%s", "already freed"); + return 0; + } struct server_data *server_data = _scm_to_server_data (server); ssh_bind_free (server_data->bind); return 0; diff --git a/libguile-ssh/session-type.c b/libguile-ssh/session-type.c index f6d909f..a766329 100644 --- a/libguile-ssh/session-type.c +++ b/libguile-ssh/session-type.c @@ -41,6 +41,11 @@ mark_session (SCM session_smob) size_t free_session (SCM session_smob) { + if (! SCM_SMOB_PREDICATE (session_tag, session_smob)) + { + _ssh_log (SSH_LOG_FUNCTIONS, "free_session", "%s", "already freed"); + return 0; + } struct session_data *data = _scm_to_session_data (session_smob); ssh_disconnect (data->ssh_session); diff --git a/libguile-ssh/sftp-session-type.c b/libguile-ssh/sftp-session-type.c index c3260e3..ae59c57 100644 --- a/libguile-ssh/sftp-session-type.c +++ b/libguile-ssh/sftp-session-type.c @@ -42,6 +42,11 @@ mark_sftp_session (SCM sftp_session) static size_t free_sftp_session (SCM sftp_session) { + if (! SCM_SMOB_PREDICATE (sftp_session_tag, sftp_session)) + { + _ssh_log (SSH_LOG_FUNCTIONS, "free_sftp_session", "%s", "already freed"); + return 0; + } struct sftp_session_data *sftp_sd = _scm_to_sftp_session_data (sftp_session); sftp_free (sftp_sd->sftp_session); return 0; |
