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 2007 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#pragma ident	"%Z%%M%	%I%	%E% SMI"
28
29/*
30 * ASSERTION:
31 * Can call discard on an already discarded buffer.
32 *
33 * SECTION: Speculative Tracing/Discarding a Speculation;
34 *	Options and Tunables/cleanrate
35 *
36 */
37#pragma D option quiet
38#pragma D option cleanrate=3000hz
39
40BEGIN
41{
42	self->i = 0;
43	self->discard1 = 0;
44	self->discard2 = 0;
45	var1 = speculation();
46	printf("Speculation ID: %d\n", var1);
47}
48
49BEGIN
50/var1/
51{
52	speculate(var1);
53	printf("This statement and the following are speculative!!\n");
54	printf("Speculating on id: %d\n", var1);
55	self->i++;
56}
57
58BEGIN
59/(self->i)/
60{
61	discard(var1);
62	self->discard1++;
63	discard(var1);
64	self->discard2++;
65}
66
67BEGIN
68/(self->discard2) && (self->discard1)/
69{
70	printf("Discarded a discarded buffer\n");
71	exit(0);
72}
73
74
75BEGIN
76/(!self->discard2) || (!self->discard1)/
77{
78	printf("Couldnt discard a discarded buffer\n");
79	exit(1);
80}
81
82ERROR
83{
84	exit(1);
85}
86