add: help->dthps_deferred = 0;
context: dtrace_meta_register(const char *name, const dtrace_mops_t *mops, void *arg,    dtrace_meta_provider_id_t *idp){	dtrace_meta_t *meta;	dtrace_helpers_t *help, *next;	int i;	*idp = DTRACE_METAPROVNONE;	/*	 * We strictly don't need the name, but we hold onto it for	 * debuggability. All hail error queues!	 */	if (name == NULL) {		cmn_err(CE_WARN, "failed to register meta-provider: "		    "invalid name");		return (EINVAL);	}	if (mops == NULL ||	    mops->dtms_create_probe == NULL ||	    mops->dtms_provide_pid == NULL ||	    mops->dtms_remove_pid == NULL) {		cmn_err(CE_WARN, "failed to register meta-register %s: "		    "invalid ops", name);		return (EINVAL);	}	meta = kmem_zalloc(sizeof (dtrace_meta_t), KM_SLEEP);	meta->dtm_mops = *mops;	meta->dtm_name = kmem_alloc(strlen(name) + 1, KM_SLEEP);	(void) strcpy(meta->dtm_name, name);	meta->dtm_arg = arg;	mutex_enter(&dtrace_meta_lock);	mutex_enter(&dtrace_lock);	if (dtrace_meta_pid != NULL) {		mutex_exit(&dtrace_lock);		mutex_exit(&dtrace_meta_lock);		cmn_err(CE_WARN, "failed to register meta-register %s: "		    "user-land meta-provider exists", name);		kmem_free(meta->dtm_name, strlen(meta->dtm_name) + 1);		kmem_free(meta, sizeof (dtrace_meta_t));		return (EINVAL);	}	dtrace_meta_pid = meta;	*idp = (dtrace_meta_provider_id_t)meta;	/*	 * If there are providers and probes ready to go, pass them	 * off to the new meta provider now.	 */	help = dtrace_deferred_pid;	dtrace_deferred_pid = NULL;	mutex_exit(&dtrace_lock);	while (help != NULL) {		for (i = 0; i < help->dthps_nprovs; i++) {			dtrace_helper_provide(&help->dthps_provs[i]->dthp_prov,			    help->dthps_pid);		}		next = help->dthps_next;		help->dthps_next = NULL;		help->dthps_prev = NULL;		help = next;	}	mutex_exit(&dtrace_meta_lock);	return (0);}