summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/dtrace/test/pkg/SUNWdtrt/prototype_com4
-rw-r--r--usr/src/cmd/dtrace/test/tst/common/java_api/src/TestMaxConsumers.java97
-rw-r--r--usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh54
-rw-r--r--usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh.out17
-rw-r--r--usr/src/lib/libdtrace_jni/common/dtj_consume.c6
-rw-r--r--usr/src/lib/libdtrace_jni/common/dtrace_jni.c14
-rw-r--r--usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/Aggregation.java4
-rw-r--r--usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/ProbeDescription.java4
8 files changed, 183 insertions, 17 deletions
diff --git a/usr/src/cmd/dtrace/test/pkg/SUNWdtrt/prototype_com b/usr/src/cmd/dtrace/test/pkg/SUNWdtrt/prototype_com
index 0c9b0c8a05..67c018e4ca 100644
--- a/usr/src/cmd/dtrace/test/pkg/SUNWdtrt/prototype_com
+++ b/usr/src/cmd/dtrace/test/pkg/SUNWdtrt/prototype_com
@@ -20,7 +20,7 @@
#
#
-# Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -1391,3 +1391,5 @@ f none opt/SUNWdtrt/tst/common/java_api/tst.StateMachine.ksh 0444 root bin
f none opt/SUNWdtrt/tst/common/java_api/tst.StateMachine.ksh.out 0444 root bin
f none opt/SUNWdtrt/tst/common/java_api/tst.Enable.ksh 0444 root bin
f none opt/SUNWdtrt/tst/common/java_api/tst.Enable.ksh.out 0444 root bin
+f none opt/SUNWdtrt/tst/common/java_api/tst.MaxConsumers.ksh 0444 root bin
+f none opt/SUNWdtrt/tst/common/java_api/tst.MaxConsumers.ksh.out 0444 root bin
diff --git a/usr/src/cmd/dtrace/test/tst/common/java_api/src/TestMaxConsumers.java b/usr/src/cmd/dtrace/test/tst/common/java_api/src/TestMaxConsumers.java
new file mode 100644
index 0000000000..50eeac23b7
--- /dev/null
+++ b/usr/src/cmd/dtrace/test/tst/common/java_api/src/TestMaxConsumers.java
@@ -0,0 +1,97 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * ident "%Z%%M% %I% %E% SMI"
+ */
+
+import org.opensolaris.os.dtrace.*;
+
+/**
+ * Regression for 6506495 -DJAVA_DTRACE_MAX_CONSUMERS=N for any N < 8
+ * is treated as if it were 8.
+ */
+public class TestMaxConsumers {
+ static final String MAX_CONSUMERS_PROPERTY_NAME =
+ "JAVA_DTRACE_MAX_CONSUMERS";
+
+ static Integer
+ getIntegerProperty(String name)
+ {
+ Integer value = null;
+ String property = System.getProperty(name);
+ if (property != null && property.length() != 0) {
+ try {
+ value = Integer.parseInt(property);
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ }
+ }
+ return value;
+ }
+
+ public static void
+ main(String[] args)
+ {
+ Integer property = getIntegerProperty(MAX_CONSUMERS_PROPERTY_NAME);
+ int max = (property == null ? 0 : property);
+ int n = (property == null ? 11 : (max < 1 ? 1 : max));
+
+ Consumer[] consumers = new Consumer[n];
+ try {
+ for (int i = 0; i < n; ++i) {
+ consumers[i] = new LocalConsumer();
+ consumers[i].open();
+ }
+ for (int i = 0; i < n; ++i) {
+ consumers[i].close();
+ }
+ for (int i = 0; i < n; ++i) {
+ consumers[i] = new LocalConsumer();
+ consumers[i].open();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ try {
+ Consumer consumer = new LocalConsumer();
+ consumer.open();
+ if (max > 0) {
+ System.out.println("Error: " + (max + 1) + " > " +
+ MAX_CONSUMERS_PROPERTY_NAME);
+ } else {
+ System.out.println("Success");
+ }
+ consumer.close();
+ } catch (Exception e) {
+ System.out.println("Success");
+ } finally {
+ for (int i = 0; i < n; ++i) {
+ consumers[i].close();
+ }
+ }
+ }
+}
diff --git a/usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh b/usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh
new file mode 100644
index 0000000000..9c1f3623e9
--- /dev/null
+++ b/usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh
@@ -0,0 +1,54 @@
+#!/bin/ksh -p
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+
+# ident "%Z%%M% %I% %E% SMI"
+
+############################################################################
+# ASSERTION:
+# Fixed bug 6506495 -DJAVA_DTRACE_MAX_CONSUMERS=N for any N < 8 is
+# treated as if it were 8.
+#
+# SECTION: Java API
+#
+############################################################################
+
+FLAGS=""
+ARCH=`bitarch.exe`
+
+if [ $ARCH == "64" ]; then
+ FLAGS="-d64"
+fi
+
+java $FLAGS -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=-1 -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=0 -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=1 -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=2 -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=7 -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=8 -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=9 -cp test.jar TestMaxConsumers
+java $FLAGS -DJAVA_DTRACE_MAX_CONSUMERS=19 -cp test.jar TestMaxConsumers
diff --git a/usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh.out b/usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh.out
new file mode 100644
index 0000000000..f68fc4ea5f
--- /dev/null
+++ b/usr/src/cmd/dtrace/test/tst/common/java_api/tst.MaxConsumers.ksh.out
@@ -0,0 +1,17 @@
+Success
+JAVA_DTRACE_MAX_CONSUMERS=-1
+Success
+JAVA_DTRACE_MAX_CONSUMERS=0
+Success
+JAVA_DTRACE_MAX_CONSUMERS=1
+Success
+JAVA_DTRACE_MAX_CONSUMERS=2
+Success
+JAVA_DTRACE_MAX_CONSUMERS=7
+Success
+JAVA_DTRACE_MAX_CONSUMERS=8
+Success
+JAVA_DTRACE_MAX_CONSUMERS=9
+Success
+JAVA_DTRACE_MAX_CONSUMERS=19
+Success
diff --git a/usr/src/lib/libdtrace_jni/common/dtj_consume.c b/usr/src/lib/libdtrace_jni/common/dtj_consume.c
index e656ff5ba5..3d43ab1c22 100644
--- a/usr/src/lib/libdtrace_jni/common/dtj_consume.c
+++ b/usr/src/lib/libdtrace_jni/common/dtj_consume.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -1784,6 +1784,7 @@ dtj_agghandler(const dtrace_bufdata_t *bufdata, dtj_java_consumer_t *jc)
if (jc->dtjj_tuple == NULL) {
(*jenv)->CallVoidMethod(jenv, jc->dtjj_probedata,
g_pdatainvalidate_printa_jm);
+ goto printa_output;
}
tuple_member_count = (*jenv)->CallIntMethod(jenv,
@@ -1794,9 +1795,6 @@ dtj_agghandler(const dtrace_bufdata_t *bufdata, dtj_java_consumer_t *jc)
g_pdatainvalidate_printa_jm);
(*jenv)->DeleteLocalRef(jenv, jc->dtjj_tuple);
jc->dtjj_tuple = NULL;
- }
-
- if (jc->dtjj_tuple == NULL) {
goto printa_output;
}
diff --git a/usr/src/lib/libdtrace_jni/common/dtrace_jni.c b/usr/src/lib/libdtrace_jni/common/dtrace_jni.c
index 4f68f6787e..3196f9d325 100644
--- a/usr/src/lib/libdtrace_jni/common/dtrace_jni.c
+++ b/usr/src/lib/libdtrace_jni/common/dtrace_jni.c
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -231,17 +231,15 @@ dtj_add_consumer(JNIEnv *jenv, dtj_consumer_t *c, int *seq)
bzero(g_consumer_table, (INITIAL_CAPACITY *
sizeof (dtj_consumer_t *)));
g_consumer_capacity = INITIAL_CAPACITY;
+ } else if ((g_max_consumers > 0) && (g_consumer_count >=
+ g_max_consumers)) {
+ dtj_throw_resource_limit(jenv, "Too many consumers");
+ (void) pthread_mutex_unlock(&g_table_lock);
+ return (B_FALSE);
} else if (g_consumer_count >= g_consumer_capacity) {
dtj_consumer_t **t;
size_t new_capacity;
- if ((g_max_consumers > 0) && (g_consumer_count >=
- g_max_consumers)) {
- dtj_throw_resource_limit(jenv, "Too many consumers");
- (void) pthread_mutex_unlock(&g_table_lock);
- return (B_FALSE);
- }
-
if (g_consumer_capacity <= g_max_capacity_increment) {
new_capacity = (g_consumer_capacity * 2);
} else {
diff --git a/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/Aggregation.java b/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/Aggregation.java
index f88532819a..1ec2035619 100644
--- a/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/Aggregation.java
+++ b/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/Aggregation.java
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* ident "%Z%%M% %I% %E% SMI"
@@ -79,7 +79,7 @@ public final class Aggregation implements Serializable {
BeanInfo info = Introspector.getBeanInfo(Aggregation.class);
PersistenceDelegate persistenceDelegate =
new DefaultPersistenceDelegate(
- new String[] {"name", "id", "records"})
+ new String[] {"name", "ID", "records"})
{
@Override
protected boolean
diff --git a/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/ProbeDescription.java b/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/ProbeDescription.java
index c0bfabcde8..cdd1631c4f 100644
--- a/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/ProbeDescription.java
+++ b/usr/src/lib/libdtrace_jni/java/src/org/opensolaris/os/dtrace/ProbeDescription.java
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* ident "%Z%%M% %I% %E% SMI"
@@ -88,7 +88,7 @@ public final class ProbeDescription implements Serializable,
BeanInfo info = Introspector.getBeanInfo(ProbeDescription.class);
PersistenceDelegate persistenceDelegate =
new DefaultPersistenceDelegate(
- new String[] {"id", "provider", "module",
+ new String[] {"ID", "provider", "module",
"function", "name"});
BeanDescriptor d = info.getBeanDescriptor();
d.setValue("persistenceDelegate", persistenceDelegate);