diff options
author | Anand V. Avati <avati@amp.gluster.com> | 2009-04-18 01:09:31 +0530 |
---|---|---|
committer | Anand V. Avati <avati@amp.gluster.com> | 2009-04-18 01:09:31 +0530 |
commit | 307528ef9a33a4d294b3ea49bbf5f0b16b27aa0f (patch) | |
tree | 08aecf95d4615ea05dc1c78aacef5950dd647901 /transport/socket/src/socket.c | |
parent | 50b2291e3b046ea6b8fdfcb7e206c772eae64f0e (diff) | |
download | glusterfs-307528ef9a33a4d294b3ea49bbf5f0b16b27aa0f.tar.gz glusterfs-307528ef9a33a4d294b3ea49bbf5f0b16b27aa0f.tar.xz glusterfs-307528ef9a33a4d294b3ea49bbf5f0b16b27aa0f.zip |
disconnect transport peer if system is out of memory while allocating iobuf
Diffstat (limited to 'transport/socket/src/socket.c')
-rw-r--r-- | transport/socket/src/socket.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/transport/socket/src/socket.c b/transport/socket/src/socket.c index 4c9338bfe2..b37c49090b 100644 --- a/transport/socket/src/socket.c +++ b/transport/socket/src/socket.c @@ -510,6 +510,7 @@ __socket_proto_state_machine (transport_t *this) size_t size2 = 0; int previous_state = -1; struct socket_header *hdr = NULL; + struct iobuf *iobuf = NULL; priv = this->private; @@ -592,10 +593,17 @@ __socket_proto_state_machine (transport_t *this) if (size2) { /* TODO: sanity check size2 < page size */ - priv->incoming.iobuf = - iobuf_get (this->xl->ctx->iobuf_pool); - priv->incoming.buf_p = - priv->incoming.iobuf->ptr; + iobuf = iobuf_get (this->xl->ctx->iobuf_pool); + if (!iobuf) { + gf_log (this->xl->name, GF_LOG_ERROR, + "unable to allocate IO buffer " + "for peer %s", + this->peerinfo.identifier); + ret = -ENOMEM; + goto unlock; + } + priv->incoming.iobuf = iobuf; + priv->incoming.buf_p = iobuf->ptr; } priv->incoming.vector[0].iov_base = |