@njsmith As now errobj build only if error occurred, so is it necessary to, pass ufunc_name as separate arguments ?
Now, <code>*errobj = Py_BuildValue("NO", PyBytes_FromString(name), retval);</code> doesn't seems to create much delay. 

As suggested by @juliantaylor  the flow is 
<pre>
extract extobj => call _check_ufunc_err => if (!okay) { build extract pyvals and build errobj }
</pre>