diff --git a/symbol.c b/symbol.c
index 630a386..c05af45 100644
--- a/symbol.c
+++ b/symbol.c
@@ -440,15 +440,9 @@ static inline VALUE
 dsymbol_check(const VALUE sym)
 {
     if (UNLIKELY(rb_objspace_garbage_object_p(sym))) {
-	const VALUE fstr = RSYMBOL(sym)->fstr;
-	RSYMBOL(sym)->fstr = 0;
-
-	unregister_sym(fstr, sym);
-	return dsymbol_alloc(rb_cSymbol, fstr, rb_enc_get(fstr));
-    }
-    else {
-	return sym;
+	rb_gc_resurrect(sym);
     }
+    return sym;
 }
 
 static ID
