ROOT logo
// $Id: SigTestOperator.cxx 2623 2011-12-21 06:40:37Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#include "SigTestOperator.h"
#include "SigTestOperator.c7"

#include <Gled/GThread.h>

// SigTestOperator

//______________________________________________________________________________
//
//

ClassImp(SigTestOperator);

//==============================================================================

void SigTestOperator::_init()
{
  bRaiseILL = bRaiseBUS = bRaiseSEGV = bRaiseFPE = false;
  fResult = 0;
}

SigTestOperator::SigTestOperator(const Text_t* n, const Text_t* t) :
  Operator(n, t)
{
  _init();
}

SigTestOperator::~SigTestOperator()
{}

//==============================================================================

void SigTestOperator::Operate(Operator::Arg* op_arg)
{
  PreOperate(op_arg);

  if (bRaiseILL)
  {
    {
      GLensWriteHolder wrlck(this);
      SetRaiseILL(false);
    }
    // This just causes segv now :(
    // unsigned char insn[8] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
    // void (*function)() = (void (*)()) insn;
    // function();
    GThread::Self()->Kill(GThread::SigILL);
  }

  if (bRaiseBUS)
  {
    {
      GLensWriteHolder wrlck(this);
      SetRaiseBUS(false);
    }
    // This does not "work".
    // char     *cptr = (char*) malloc(2*sizeof(Long64_t));
    // Long64_t *iptr = (Long64_t*) (cptr + 3);
    // *iptr = 42;
    GThread::Self()->Kill(GThread::SigBUS);
  }

  if (bRaiseSEGV)
  {
    {
      GLensWriteHolder wrlck(this);
      SetRaiseSEGV(false);
    }
    // This causes ill on mac.
    // TObject* obj = 0;
    // obj->Print();
    GThread::Self()->Kill(GThread::SigSEGV);
  }

  if (bRaiseFPE)
  {
    {
      GLensWriteHolder wrlck(this);
      SetRaiseFPE(false);
    }
    Double_t zero = 0;
    fResult = 124343.5465 / zero;
  }

  PostOperate(op_arg);
}

 SigTestOperator.cxx:1
 SigTestOperator.cxx:2
 SigTestOperator.cxx:3
 SigTestOperator.cxx:4
 SigTestOperator.cxx:5
 SigTestOperator.cxx:6
 SigTestOperator.cxx:7
 SigTestOperator.cxx:8
 SigTestOperator.cxx:9
 SigTestOperator.cxx:10
 SigTestOperator.cxx:11
 SigTestOperator.cxx:12
 SigTestOperator.cxx:13
 SigTestOperator.cxx:14
 SigTestOperator.cxx:15
 SigTestOperator.cxx:16
 SigTestOperator.cxx:17
 SigTestOperator.cxx:18
 SigTestOperator.cxx:19
 SigTestOperator.cxx:20
 SigTestOperator.cxx:21
 SigTestOperator.cxx:22
 SigTestOperator.cxx:23
 SigTestOperator.cxx:24
 SigTestOperator.cxx:25
 SigTestOperator.cxx:26
 SigTestOperator.cxx:27
 SigTestOperator.cxx:28
 SigTestOperator.cxx:29
 SigTestOperator.cxx:30
 SigTestOperator.cxx:31
 SigTestOperator.cxx:32
 SigTestOperator.cxx:33
 SigTestOperator.cxx:34
 SigTestOperator.cxx:35
 SigTestOperator.cxx:36
 SigTestOperator.cxx:37
 SigTestOperator.cxx:38
 SigTestOperator.cxx:39
 SigTestOperator.cxx:40
 SigTestOperator.cxx:41
 SigTestOperator.cxx:42
 SigTestOperator.cxx:43
 SigTestOperator.cxx:44
 SigTestOperator.cxx:45
 SigTestOperator.cxx:46
 SigTestOperator.cxx:47
 SigTestOperator.cxx:48
 SigTestOperator.cxx:49
 SigTestOperator.cxx:50
 SigTestOperator.cxx:51
 SigTestOperator.cxx:52
 SigTestOperator.cxx:53
 SigTestOperator.cxx:54
 SigTestOperator.cxx:55
 SigTestOperator.cxx:56
 SigTestOperator.cxx:57
 SigTestOperator.cxx:58
 SigTestOperator.cxx:59
 SigTestOperator.cxx:60
 SigTestOperator.cxx:61
 SigTestOperator.cxx:62
 SigTestOperator.cxx:63
 SigTestOperator.cxx:64
 SigTestOperator.cxx:65
 SigTestOperator.cxx:66
 SigTestOperator.cxx:67
 SigTestOperator.cxx:68
 SigTestOperator.cxx:69
 SigTestOperator.cxx:70
 SigTestOperator.cxx:71
 SigTestOperator.cxx:72
 SigTestOperator.cxx:73
 SigTestOperator.cxx:74
 SigTestOperator.cxx:75
 SigTestOperator.cxx:76
 SigTestOperator.cxx:77
 SigTestOperator.cxx:78
 SigTestOperator.cxx:79
 SigTestOperator.cxx:80
 SigTestOperator.cxx:81
 SigTestOperator.cxx:82
 SigTestOperator.cxx:83
 SigTestOperator.cxx:84
 SigTestOperator.cxx:85
 SigTestOperator.cxx:86
 SigTestOperator.cxx:87
 SigTestOperator.cxx:88
 SigTestOperator.cxx:89
 SigTestOperator.cxx:90
 SigTestOperator.cxx:91
 SigTestOperator.cxx:92
 SigTestOperator.cxx:93