|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21571/root/usr/share/systemtap/tapset/ |
Upload File : |
// Speculative tapset
// Copyright (C) 2011 Red Hat Inc.
//
// This file is part of systemtap, and is free software. You can
// redistribute it and/or modify it under the terms of the GNU General
// Public License (GPL); either version 2, or (at your option) any
// later version.
global _spec_id
global _spec_counter
global _spec_buff
global _spec_discard
/**
* sfunction speculation - Allocate a new id for speculative output
*
* The speculation() function is called when a new speculation buffer is needed.
* It returns an id for the speculative output.
* There can be multiple threads being speculated on concurrently.
* This id is used by other speculation functions to keep the threads
* separate.
*/
function speculation:long ()
{
_spec_id += 1
return _spec_id
}
/**
* sfunction speculate - Store a string for possible output later
* @id: buffer id to store the information in
* @output: string to write out when commit occurs
*
* Add a string to the speculaive buffer for id.
*/
function speculate (id:long, output:string)
{
_spec_counter[id] += 1
_spec_buff[id, _spec_counter[id]] = output
}
function _spec_erase (id:long) {
foreach([i, counter] in _spec_discard)
delete _spec_buff[i, counter]
delete _spec_discard
}
/**
* sfunction discard - Discard all output related to a speculation buffer
* @id: of the buffer to store the information in
*
*/
function discard (id:long)
{
foreach([i, counter] in _spec_buff)
if (i==id) _spec_discard[i, counter] = 1
_spec_erase (id)
}
/**
* sfunction commit - Write out all output related to a speculation buffer
* @id: of the buffer to store the information in
*
* Output all the output for @id in the order that it was entered into
* the speculative buffer by speculative().
*/
function commit (id:long)
{
foreach([i, counter+] in _spec_buff) {
if (i==id) {
printf("%s", _spec_buff[i, counter])
_spec_discard[i, counter] = 1
}
}
_spec_erase (id)
}