1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26#ident	"%Z%%M%	%I%	%E% SMI"
27
28#
29# This script attempts to tease out a race when probes are initially enabled.
30#
31script()
32{
33	#
34	# Nauseatingly, the #defines below must be in the 0th column to
35	# satisfy the ancient cpp that -C defaults to.
36	#
37	$dtrace -C -s /dev/stdin <<EOF
38#define	PROF1		profile:::profile-4000hz
39#define	PROF4		PROF1, PROF1, PROF1, PROF1
40#define	PROF16		PROF4, PROF4, PROF4, PROF4
41#define	PROF64		PROF16, PROF16, PROF16, PROF16
42#define	PROF256		PROF64, PROF64, PROF64, PROF64
43#define	PROF512		PROF256, PROF256
44
45	PROF1
46	{
47		this->x = 0;
48	}
49
50	PROF512
51	{
52		this->x++;
53	}
54
55	PROF1
56	/this->x != 512/
57	{
58		printf("failed! x is %d (expected 512)", this->x);
59		exit(1);
60	}
61
62	tick-1sec
63	/secs++/
64	{
65		exit(0);
66	}
67EOF
68}
69
70if [ $# != 1 ]; then
71	echo expected one argument: '<'dtrace-path'>'
72	exit 2
73fi
74
75dtrace=$1
76let i=0
77
78while [ "$i" -lt 20 ]; do
79	script
80	status=$?
81
82	if [ "$status" -ne 0 ]; then
83		exit $status
84	fi
85
86	let i=i+1
87done
88
89exit 0
90