summaryrefslogtreecommitdiff
path: root/random.c
diff options
context:
space:
mode:
Diffstat (limited to 'random.c')
-rw-r--r--random.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/random.c b/random.c
index 9dbcbd1d62..d05fe6d9c6 100644
--- a/random.c
+++ b/random.c
@@ -596,9 +596,14 @@ random_get_seed(VALUE obj)
static VALUE
random_copy(VALUE obj, VALUE orig)
{
- rb_random_t *rnd1 = get_rnd(obj);
- rb_random_t *rnd2 = get_rnd(orig);
- struct MT *mt = &rnd1->mt;
+ rb_random_t *rnd1, *rnd2;
+ struct MT *mt;
+
+ if (!OBJ_INIT_COPY(obj, orig)) return obj;
+
+ rnd1 = get_rnd(obj);
+ rnd2 = get_rnd(orig);
+ mt = &rnd1->mt;
*rnd1 = *rnd2;
mt->next = mt->state + numberof(mt->state) - mt->left + 1;