PERFORCE change 95640 for review
John Birrell
jb at FreeBSD.org
Thu Apr 20 00:57:36 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=95640
Change 95640 by jb at jb_freebsd2 on 2006/04/20 00:56:56
Now that the provider list is being populated, use it to feed
the debug.dtrace.providers sysctl value.
Affected files ...
.. //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_sysctl.c#2 edit
Differences ...
==== //depot/projects/dtrace/src/sys/cddl/dev/dtrace/dtrace_sysctl.c#2 (text+ko) ====
@@ -32,11 +32,49 @@
static int
sysctl_dtrace_providers(SYSCTL_HANDLER_ARGS)
{
- char newname[32];
- strlcpy(newname, "someone", sizeof(newname));
- int error;
+ char *p_name = NULL;
+ dtrace_provider_t
+ *prov = dtrace_provider;
+ int error = 0;
+ size_t len = 0;
+
+ mutex_enter(&dtrace_provider_lock);
+ mutex_enter(&dtrace_lock);
+
+ /* Compute the length of the space-separated provider name string. */
+ while (prov != NULL) {
+ len += strlen(prov->dtpv_name) + 1;
+ prov = prov->dtpv_next;
+ }
+
+ if ((p_name = malloc(len, M_DTRACE, M_NOWAIT)) == NULL)
+ error = ENOMEM;
+ else {
+ /* Start with an empty string. */
+ *p_name = '\0';
+
+ /* Point to the first provider again. */
+ prov = dtrace_provider;
+
+ /* Loop through the providers, appending the names. */
+ while (prov != NULL) {
+ if (prov != dtrace_provider)
+ (void) strlcat(p_name, " ", len);
+
+ (void) strlcat(p_name, prov->dtpv_name, len);
+
+ prov = prov->dtpv_next;
+ }
+ }
+
+ mutex_exit(&dtrace_lock);
+ mutex_exit(&dtrace_provider_lock);
+
+ if (p_name != NULL) {
+ error = sysctl_handle_string(oidp, p_name, len, req);
- error = sysctl_handle_string(oidp, &newname[0], sizeof(newname), req);
+ free(p_name, M_DTRACE);
+ }
return (error);
}
More information about the p4-projects
mailing list