- GV *gv = cGVOPx_gv(gvop);
- STRLEN len;
- const char *s = SvPV_const(name, len);
-
- if (GvNAMELEN(gv) == len && strnEQ(GvNAME(gv), s, len)) {
- o->op_type = OP_CUSTOM;
- o->op_ppaddr = INT2PTR(Perl_ppaddr_t, SvIVX(pp_sv));
-
- if (last_arg)
- last_arg->op_sibling = NULL;
- op_free(rv2cv);
-
- {
- MAGIC *mg = mg_find(pp_sv, PERL_MAGIC_ext);
- if (mg) {
- sub_op_check_t check = INT2PTR(sub_op_check_t, SvIVX(mg->mg_obj));
- o = CALL_FPTR(check)(aTHX_ o, mg->mg_ptr);
- }
- }
-
- sub_op_linklist(o);
- }
+ so_op_name_t *on = PerlMemShared_malloc(sizeof(*on) + len);
+ Copy(name, &on->buf, len, char);
+ (&on->buf)[len] = '\0';
+ on->len = len;
+#ifdef USE_ITHREADS
+ MUTEX_LOCK(&so_op_name_mutex);
+#endif /* USE_ITHREADS */
+ ptable_store(so_op_name, o, on);
+#ifdef USE_ITHREADS
+ MUTEX_UNLOCK(&so_op_name_mutex);
+#endif /* USE_ITHREADS */