summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/call-stub.c8
-rw-r--r--libglusterfs/src/common-utils.h5
-rw-r--r--libglusterfs/src/dict.c35
-rw-r--r--libglusterfs/src/fd.c29
-rw-r--r--libglusterfs/src/stack.h10
-rw-r--r--libglusterfs/src/timer.c15
-rw-r--r--xlators/Makefile.am2
-rw-r--r--xlators/encryption/rot-13/src/rot-13.c16
-rw-r--r--xlators/features/locks/src/common.c80
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c4
-rw-r--r--xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c16
11 files changed, 152 insertions, 68 deletions
diff --git a/libglusterfs/src/call-stub.c b/libglusterfs/src/call-stub.c
index 233a1616..497637fa 100644
--- a/libglusterfs/src/call-stub.c
+++ b/libglusterfs/src/call-stub.c
@@ -1738,7 +1738,8 @@ fop_readdirp_cbk_stub (call_frame_t *frame,
if (op_ret > 0) {
list_for_each_entry (entry, &entries->list, list) {
stub_entry = gf_dirent_for_name (entry->d_name);
- ERR_ABORT (stub_entry);
+ if (!stub_entry)
+ goto out;
stub_entry->d_off = entry->d_off;
stub_entry->d_ino = entry->d_ino;
stub_entry->d_stat = entry->d_stat;
@@ -1780,11 +1781,12 @@ fop_readdir_cbk_stub (call_frame_t *frame,
if (op_ret > 0) {
list_for_each_entry (entry, &entries->list, list) {
stub_entry = gf_dirent_for_name (entry->d_name);
- ERR_ABORT (stub_entry);
+ if (!stub_entry)
+ goto out;
stub_entry->d_off = entry->d_off;
stub_entry->d_ino = entry->d_ino;
- list_add_tail (&stub_entry->list,
+ list_add_tail (&stub_entry->list,
&stub->args.readdir_cbk.entries.list);
}
}
diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h
index b11e3043..ab230993 100644
--- a/libglusterfs/src/common-utils.h
+++ b/libglusterfs/src/common-utils.h
@@ -68,11 +68,6 @@ void trap (void);
#define GF_UNIT_PB_STRING "PB"
-#define ERR_ABORT(ptr) \
- if (ptr == NULL) { \
- abort (); \
- }
-
enum _gf_boolean
{
_gf_false = 0,
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c
index 1f601162..4a8945ff 100644
--- a/libglusterfs/src/dict.c
+++ b/libglusterfs/src/dict.c
@@ -40,11 +40,12 @@ data_pair_t *
get_new_data_pair ()
{
data_pair_t *data_pair_ptr = NULL;
-
+
data_pair_ptr = (data_pair_t *) GF_CALLOC (1, sizeof (data_pair_t),
gf_common_mt_data_pair_t);
- ERR_ABORT (data_pair_ptr);
-
+ if (!data_pair_ptr)
+ gf_log ("dict", GF_LOG_ERROR, "memory alloc failed");
+
return data_pair_ptr;
}
@@ -1064,7 +1065,9 @@ data_to_int64 (data_t *data)
return -1;
char *str = alloca (data->len + 1);
- ERR_ABORT (str);
+ if (!str)
+ return -1;
+
memcpy (str, data->data, data->len);
str[data->len] = '\0';
return (int64_t) strtoull (str, NULL, 0);
@@ -1077,7 +1080,9 @@ data_to_int32 (data_t *data)
return -1;
char *str = alloca (data->len + 1);
- ERR_ABORT (str);
+ if (!str)
+ return -1;
+
memcpy (str, data->data, data->len);
str[data->len] = '\0';
@@ -1091,7 +1096,9 @@ data_to_int16 (data_t *data)
return -1;
char *str = alloca (data->len + 1);
- ERR_ABORT (str);
+ if (!str)
+ return -1;
+
memcpy (str, data->data, data->len);
str[data->len] = '\0';
@@ -1106,7 +1113,9 @@ data_to_int8 (data_t *data)
return -1;
char *str = alloca (data->len + 1);
- ERR_ABORT (str);
+ if (!str)
+ return -1;
+
memcpy (str, data->data, data->len);
str[data->len] = '\0';
@@ -1120,7 +1129,9 @@ data_to_uint64 (data_t *data)
if (!data)
return -1;
char *str = alloca (data->len + 1);
- ERR_ABORT (str);
+ if (!str)
+ return -1;
+
memcpy (str, data->data, data->len);
str[data->len] = '\0';
@@ -1134,7 +1145,9 @@ data_to_uint32 (data_t *data)
return -1;
char *str = alloca (data->len + 1);
- ERR_ABORT (str);
+ if (!str)
+ return -1;
+
memcpy (str, data->data, data->len);
str[data->len] = '\0';
@@ -1148,7 +1161,9 @@ data_to_uint16 (data_t *data)
return -1;
char *str = alloca (data->len + 1);
- ERR_ABORT (str);
+ if (!str)
+ return -1;
+
memcpy (str, data->data, data->len);
str[data->len] = '\0';
diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c
index d26854eb..9269e5cf 100644
--- a/libglusterfs/src/fd.c
+++ b/libglusterfs/src/fd.c
@@ -87,10 +87,12 @@ gf_fd_fdtable_expand (fdtable_t *fdtable, uint32_t nr)
{
fdentry_t *oldfds = NULL;
uint32_t oldmax_fds = -1;
+ int ret = -1;
if (fdtable == NULL || nr < 0) {
gf_log ("fd", GF_LOG_ERROR, "invalid argument");
- return EINVAL;
+ ret = EINVAL;
+ goto out;
}
nr /= (1024 / sizeof (fdentry_t));
@@ -102,7 +104,10 @@ gf_fd_fdtable_expand (fdtable_t *fdtable, uint32_t nr)
fdtable->fdentries = GF_CALLOC (nr, sizeof (fdentry_t),
gf_common_mt_fdentry_t);
- ERR_ABORT (fdtable->fdentries);
+ if (!fdtable->fdentries) {
+ ret = ENOMEM;
+ goto out;
+ }
fdtable->max_fds = nr;
if (oldfds) {
@@ -119,7 +124,9 @@ gf_fd_fdtable_expand (fdtable_t *fdtable, uint32_t nr)
*/
fdtable->first_free = oldmax_fds;
GF_FREE (oldfds);
- return 0;
+ ret = 0;
+out:
+ return ret;
}
@@ -499,11 +506,17 @@ fd_create (inode_t *inode, pid_t pid)
}
fd = GF_CALLOC (1, sizeof (fd_t), gf_common_mt_fd_t);
- ERR_ABORT (fd);
+ if (!fd)
+ goto out;
- fd->_ctx = GF_CALLOC (1, (sizeof (struct _fd_ctx) *
+ fd->_ctx = GF_CALLOC (1, (sizeof (struct _fd_ctx) *
inode->table->xl->graph->xl_count),
gf_common_mt_fd_ctx);
+ if (!fd->_ctx) {
+ GF_FREE (fd);
+ fd = NULL;
+ goto out;
+ }
fd->inode = inode_ref (inode);
fd->pid = pid;
@@ -512,9 +525,11 @@ fd_create (inode_t *inode, pid_t pid)
LOCK_INIT (&fd->lock);
LOCK (&inode->lock);
- fd = _fd_ref (fd);
+ {
+ fd = _fd_ref (fd);
+ }
UNLOCK (&inode->lock);
-
+out:
return fd;
}
diff --git a/libglusterfs/src/stack.h b/libglusterfs/src/stack.h
index 1ce46ccd..6015b815 100644
--- a/libglusterfs/src/stack.h
+++ b/libglusterfs/src/stack.h
@@ -184,7 +184,10 @@ STACK_DESTROY (call_stack_t *stack)
\
_new = GF_CALLOC (1, sizeof (call_frame_t), \
gf_common_mt_call_frame_t); \
- ERR_ABORT (_new); \
+ if (!_new) { \
+ gf_log ("stack", GF_LOG_ERROR, "alloc failed"); \
+ break; \
+ } \
typeof(fn##_cbk) tmp_cbk = rfn; \
_new->root = frame->root; \
_new->next = frame->root->frames.next; \
@@ -219,7 +222,10 @@ STACK_DESTROY (call_stack_t *stack)
\
_new = GF_CALLOC (1, sizeof (call_frame_t), \
gf_common_mt_call_frame_t); \
- ERR_ABORT (_new); \
+ if (!_new) { \
+ gf_log ("stack", GF_LOG_ERROR, "alloc failed"); \
+ break; \
+ } \
typeof(fn##_cbk) tmp_cbk = rfn; \
_new->root = frame->root; \
_new->next = frame->root->frames.next; \
diff --git a/libglusterfs/src/timer.c b/libglusterfs/src/timer.c
index 7ff18f94..3e39231e 100644
--- a/libglusterfs/src/timer.c
+++ b/libglusterfs/src/timer.c
@@ -201,18 +201,19 @@ gf_timer_proc (void *ctx)
gf_timer_registry_t *
gf_timer_registry_init (glusterfs_ctx_t *ctx)
{
- if (ctx == NULL)
- {
+ if (ctx == NULL) {
gf_log ("timer", GF_LOG_ERROR, "invalid argument");
return NULL;
}
-
+
if (!ctx->timer) {
gf_timer_registry_t *reg = NULL;
- ctx->timer = reg = GF_CALLOC (1, sizeof (*reg),
- gf_common_mt_gf_timer_registry_t);
- ERR_ABORT (reg);
+ reg = GF_CALLOC (1, sizeof (*reg),
+ gf_common_mt_gf_timer_registry_t);
+ if (!reg)
+ goto out;
+
pthread_mutex_init (&reg->lock, NULL);
reg->active.next = &reg->active;
reg->active.prev = &reg->active;
@@ -220,6 +221,8 @@ gf_timer_registry_init (glusterfs_ctx_t *ctx)
reg->stale.prev = &reg->stale;
pthread_create (&reg->th, NULL, gf_timer_proc, ctx);
+ ctx->timer = reg;
}
+out:
return ctx->timer;
}
diff --git a/xlators/Makefile.am b/xlators/Makefile.am
index 495a6829..4c94f5e4 100644
--- a/xlators/Makefile.am
+++ b/xlators/Makefile.am
@@ -1,3 +1,3 @@
SUBDIRS = cluster storage protocol performance debug features encryption mount nfs mgmt
-CLEANFILES =
+CLEANFILES =
diff --git a/xlators/encryption/rot-13/src/rot-13.c b/xlators/encryption/rot-13/src/rot-13.c
index a334b669..9d5dab03 100644
--- a/xlators/encryption/rot-13/src/rot-13.c
+++ b/xlators/encryption/rot-13/src/rot-13.c
@@ -145,9 +145,11 @@ init (xlator_t *this)
gf_log (this->name, GF_LOG_WARNING,
"dangling volume. check volfile ");
}
-
- priv = CALLOC (sizeof (rot_13_private_t), 1);
- ERR_ABORT (priv);
+
+ priv = GF_CALLOC (sizeof (rot_13_private_t), 1, 0);
+ if (!priv)
+ return -1;
+
priv->decrypt_read = 1;
priv->encrypt_write = 1;
@@ -174,13 +176,13 @@ init (xlator_t *this)
return 0;
}
-void
+void
fini (xlator_t *this)
{
rot_13_private_t *priv = this->private;
-
- FREE (priv);
-
+
+ GF_FREE (priv);
+
return;
}
diff --git a/xlators/features/locks/src/common.c b/xlators/features/locks/src/common.c
index 2ba8df00..b34cd978 100644
--- a/xlators/features/locks/src/common.c
+++ b/xlators/features/locks/src/common.c
@@ -590,70 +590,106 @@ struct _values {
static struct _values
subtract_locks (posix_lock_t *big, posix_lock_t *small)
{
+
struct _values v = { .locks = {0, 0, 0} };
-
- if ((big->fl_start == small->fl_start) &&
- (big->fl_end == small->fl_end)) {
+
+ if ((big->fl_start == small->fl_start) &&
+ (big->fl_end == small->fl_end)) {
/* both edges coincide with big */
v.locks[0] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[0]);
+ if (!v.locks[0])
+ goto out;
memcpy (v.locks[0], big, sizeof (posix_lock_t));
v.locks[0]->fl_type = small->fl_type;
+ goto done;
}
- else if ((small->fl_start > big->fl_start) &&
- (small->fl_end < big->fl_end)) {
+
+ if ((small->fl_start > big->fl_start) &&
+ (small->fl_end < big->fl_end)) {
/* both edges lie inside big */
v.locks[0] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[0]);
+ if (!v.locks[0])
+ goto out;
+
v.locks[1] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[1]);
+ if (!v.locks[1])
+ goto out;
+
v.locks[2] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[2]);
+ if (!v.locks[1])
+ goto out;
memcpy (v.locks[0], big, sizeof (posix_lock_t));
v.locks[0]->fl_end = small->fl_start - 1;
memcpy (v.locks[1], small, sizeof (posix_lock_t));
+
memcpy (v.locks[2], big, sizeof (posix_lock_t));
v.locks[2]->fl_start = small->fl_end + 1;
+ goto done;
+
}
+
/* one edge coincides with big */
- else if (small->fl_start == big->fl_start) {
+ if (small->fl_start == big->fl_start) {
v.locks[0] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[0]);
+ if (!v.locks[0])
+ goto out;
+
v.locks[1] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[1]);
-
+ if (!v.locks[1])
+ goto out;
+
memcpy (v.locks[0], big, sizeof (posix_lock_t));
v.locks[0]->fl_start = small->fl_end + 1;
-
+
memcpy (v.locks[1], small, sizeof (posix_lock_t));
+ goto done;
}
- else if (small->fl_end == big->fl_end) {
+
+ if (small->fl_end == big->fl_end) {
v.locks[0] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[0]);
+ if (!v.locks[0])
+ goto out;
+
v.locks[1] = GF_CALLOC (1, sizeof (posix_lock_t),
gf_locks_mt_posix_lock_t);
- ERR_ABORT (v.locks[1]);
+ if (!v.locks[1])
+ goto out;
memcpy (v.locks[0], big, sizeof (posix_lock_t));
v.locks[0]->fl_end = small->fl_start - 1;
-
+
memcpy (v.locks[1], small, sizeof (posix_lock_t));
+ goto done;
}
- else {
- gf_log ("posix-locks", GF_LOG_ERROR,
- "Unexpected case in subtract_locks. Please send "
- "a bug report to gluster-devel@nongnu.org");
+
+ gf_log ("posix-locks", GF_LOG_ERROR,
+ "Unexpected case in subtract_locks. Please send "
+ "a bug report to gluster-devel@nongnu.org");
+
+out:
+ if (v.locks[0]) {
+ GF_FREE (v.locks[0]);
+ v.locks[0] = NULL;
+ }
+ if (v.locks[1]) {
+ GF_FREE (v.locks[1]);
+ v.locks[1] = NULL;
+ }
+ if (v.locks[2]) {
+ GF_FREE (v.locks[2]);
+ v.locks[2] = NULL;
}
+done:
return v;
}
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index e5df3648..b1de4692 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -2594,7 +2594,8 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
trav = trav->next;
} /* while(trav) */
value = alloca (len + 1);
- ERR_ABORT (value);
+ if (!value)
+ goto out;
len = 0;
trav = dict->members_list;
while (trav) {
@@ -2633,6 +2634,7 @@ fuse_xattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
send_fuse_err (this, finh, op_errno);
} /* if(op_ret>=0)...else */
+out:
if (need_to_free_dict)
dict_unref (dict);
diff --git a/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c b/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c
index 85228bf4..0db99640 100644
--- a/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c
+++ b/xlators/protocol/legacy/transport/ib-verbs/src/ib-verbs.c
@@ -731,7 +731,8 @@ ib_verbs_register_peer (ib_verbs_device_t *device,
return;
}
ent = (struct _qpent *) GF_CALLOC (1, sizeof (*ent), gf_ibv_mt_qpent);
- ERR_ABORT (ent);
+ if (!ent)
+ return;
/* TODO: ref reg->peer */
ent->peer = peer;
ent->next = &qpreg->ents[hash];
@@ -1522,7 +1523,8 @@ ib_verbs_get_device (transport_t *this,
trav = GF_CALLOC (1, sizeof (*trav),
gf_ibv_mt_ib_verbs_device_t);
- ERR_ABORT (trav);
+ if (!trav)
+ return NULL;
priv->device = trav;
trav->context = ibctx;
@@ -2357,10 +2359,16 @@ ib_verbs_server_event_handler (int fd, int idx, void *data,
this = GF_CALLOC (1, sizeof (transport_t),
gf_ibv_mt_transport_t);
- ERR_ABORT (this);
+ if (!this)
+ return 0;
+
priv = GF_CALLOC (1, sizeof (ib_verbs_private_t),
gf_ibv_mt_ib_verbs_private_t);
- ERR_ABORT (priv);
+ if (!priv) {
+ GF_FREE (this);
+ return 0;
+ }
+
this->private = priv;
/* Copy all the ib_verbs related values in priv, from trans_priv
as other than QP, all the values remain same */