patch 8.1.0234: incorrect reference counting in Perl interface

Problem:    Incorrect reference counting in Perl interface.
Solution:   Call SvREFCNT_inc more often, add a test. (Damien)
diff --git a/src/if_perl.xs b/src/if_perl.xs
index bc15efa..9fd2196 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -831,8 +831,7 @@
 	ptr->w_perl_private = newSV(0);
 	sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
     }
-    else
-	SvREFCNT_inc_void_NN(ptr->w_perl_private);
+    SvREFCNT_inc_void_NN(ptr->w_perl_private);
     SvRV(rv) = ptr->w_perl_private;
     SvROK_on(rv);
     return sv_bless(rv, gv_stashpv("VIWIN", TRUE));
@@ -847,8 +846,7 @@
 	ptr->b_perl_private = newSV(0);
 	sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
     }
-    else
-	SvREFCNT_inc_void_NN(ptr->b_perl_private);
+    SvREFCNT_inc_void_NN(ptr->b_perl_private);
     SvRV(rv) = ptr->b_perl_private;
     SvROK_on(rv);
     return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
@@ -918,12 +916,13 @@
     else
 	rv = newBUFrv(newSV(0), curbuf);
 
-    if (SvRV(sv) == SvRV(rv))
-	SvREFCNT_dec(SvRV(rv));
-    else // XXX: Not sure if the `else` condition are right
-	 // Test_SvREFCNT() pass in all case.
+    if (SvRV(sv) != SvRV(rv))
+	// XXX: This magic variable is a bit confusing...
+	// Is curently refcounted ?
 	sv_setsv(sv, rv);
 
+    SvREFCNT_dec(rv);
+
     return 0;
 }
 #endif /* !PROTO */