View | Details | Raw Unified | Return to bug 1000
Collapse All | Expand All

(-)a/src/core/bindings/module_helpers.cc (+30 lines)
 Lines 59-64    Link Here 
59
  }
59
  }
60
};
60
};
61
61
62
class CheckSignalEventImpl : public ns3::EventImpl
63
{
64
public:
65
    CheckSignalEventImpl ()
66
    {
67
    }
68
    virtual ~CheckSignalEventImpl ()
69
    {
70
    }
71
    virtual void Notify ()
72
    {
73
        PyGILState_STATE __py_gil_state;
74
        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
75
        
76
        PyErr_CheckSignals();
77
        if (PyErr_Occurred())
78
            ns3::Simulator::Stop();
79
        else
80
            ns3::Simulator::Schedule(ns3::Seconds(1), this);
81
        
82
        if (PyEval_ThreadsInitialized())
83
            PyGILState_Release(__py_gil_state);
84
    }
85
};
86
62
87
63
PyObject *
88
PyObject *
64
_wrap_Simulator_Schedule (PyNs3Simulator *PYBINDGEN_UNUSED (dummy), PyObject *args, PyObject *kwargs,
89
_wrap_Simulator_Schedule (PyNs3Simulator *PYBINDGEN_UNUSED (dummy), PyObject *args, PyObject *kwargs,
 Lines 310-320    Link Here 
310
335
311
  if (signal_check_frequency == -1)
336
  if (signal_check_frequency == -1)
312
    {
337
    {
338
      ns3::Ptr<CheckSignalEventImpl> py_event_impl = 
339
        ns3::Create<CheckSignalEventImpl>();
313
      if (PyEval_ThreadsInitialized ())
340
      if (PyEval_ThreadsInitialized ())
314
        py_thread_state = PyEval_SaveThread ();
341
        py_thread_state = PyEval_SaveThread ();
342
      ns3::Simulator::Schedule(ns3::Seconds(1), py_event_impl);
315
      ns3::Simulator::Run ();
343
      ns3::Simulator::Run ();
316
      if (py_thread_state)
344
      if (py_thread_state)
317
        PyEval_RestoreThread (py_thread_state);
345
        PyEval_RestoreThread (py_thread_state);
346
      if (PyErr_Occurred())
347
        return NULL;
318
    } else {
348
    } else {
319
      while (!ns3::Simulator::IsFinished ())
349
      while (!ns3::Simulator::IsFinished ())
320
        {
350
        {

Return to bug 1000