Pol  Revision:cb584c9
scrsched.cpp
Go to the documentation of this file.
1 
16 #include "scrsched.h"
17 
18 #include <ctime>
19 #include <exception>
20 
21 #include <format/format.h>
22 #include "../bscript/berror.h"
23 #include "../bscript/bobject.h"
24 #include "../clib/logfacility.h"
25 #include "../clib/passert.h"
26 #include "../clib/refptr.h"
27 #include "../plib/systemstate.h"
29 #include "globals/state.h"
30 #include "module/attributemod.h"
31 #include "module/basiciomod.h"
32 #include "module/basicmod.h"
33 #include "module/boatmod.h"
34 #include "module/cfgmod.h"
35 #include "module/clmod.h"
36 #include "module/datastore.h"
37 #include "module/filemod.h"
38 #include "module/guildmod.h"
39 #include "module/httpmod.h"
40 #include "module/mathmod.h"
41 #include "module/osmod.h"
42 #include "module/partymod.h"
43 #include "module/polsystemmod.h"
44 #include "module/sqlmod.h"
45 #include "module/storagemod.h"
46 #include "module/unimod.h"
47 #include "module/uomod.h"
48 #include "module/utilmod.h"
49 #include "module/vitalmod.h"
50 #include "polsig.h"
51 #include "profile.h"
52 #include "scrdef.h"
53 #include "scrstore.h"
54 #include "uoexec.h"
55 
56 namespace Pol
57 {
58 namespace Core
59 {
60 bool find_uoexec( unsigned int pid, UOExecutor** pp_uoexec )
61 {
62  return scriptScheduler.find_exec( pid, pp_uoexec );
63 }
64 
65 void run_ready()
66 {
68 }
69 
70 
71 void check_blocked( polclock_t* pclocksleft )
72 {
73  polclock_t now_clock = polclock();
76  polclock_t clocksleft = POLCLOCKS_PER_SEC * 60;
77  for ( ;; )
78  {
79  THREAD_CHECKPOINT( scripts, 131 );
80 
81  auto itr = scriptScheduler.getHoldlist().cbegin();
82  if ( itr == scriptScheduler.getHoldlist().cend() )
83  break;
84 
85  UOExecutor* ex = ( *itr ).second;
86  // ++ex->sleep_cycles;
87 
88  passert( ex->os_module->blocked_ );
90  clocksleft = ex->os_module->sleep_until_clock_ - now_clock;
91  if ( clocksleft <= 0 )
92  {
93  if ( clocksleft == 0 )
94  INC_PROFILEVAR( scripts_ontime );
95  else
96  INC_PROFILEVAR( scripts_late );
97  // wakey-wakey
98  // read comment above to understand what goes on here.
99  // the return value is already on the stack.
100  THREAD_CHECKPOINT( scripts, 132 );
101  ex->os_module->revive();
102  }
103  else
104  {
105  break;
106  }
107  }
108  *pclocksleft = clocksleft;
109 }
110 
112 {
113  if ( !scriptScheduler.getRunlist().empty() )
114  {
115  return 0; // we want to run immediately
116  }
117  else if ( !scriptScheduler.getHoldlist().empty() )
118  {
119  auto itr = scriptScheduler.getHoldlist().cbegin();
120  UOExecutor* ex = ( *itr ).second;
121  polclock_t clocksleft = ex->os_module->sleep_until_clock_ - now;
122  if ( clocksleft >= 0 )
123  return clocksleft;
124  else
125  return 0;
126  }
127  else
128  {
129  return -1;
130  }
131 }
132 
133 void step_scripts( polclock_t* clocksleft, bool* pactivity )
134 {
135  THREAD_CHECKPOINT( scripts, 102 );
136  *pactivity = ( !scriptScheduler.getRunlist().empty() );
137  THREAD_CHECKPOINT( scripts, 103 );
138 
139  run_ready();
140 
141  THREAD_CHECKPOINT( scripts, 104 );
142 
143  check_blocked( clocksleft );
144  THREAD_CHECKPOINT( scripts, 105 );
145  if ( !scriptScheduler.getRunlist().empty() )
146  *clocksleft = 0;
147  THREAD_CHECKPOINT( scripts, 106 );
148 }
149 
150 void start_script( const char* filename, Bscript::BObjectImp* param0, Bscript::BObjectImp* param1 )
151 {
152  Bscript::BObject bobj0( param0 ); // just to delete if it doesn't go somewhere else
153  Bscript::BObject bobj1( param1 ? param1 : Bscript::UninitObject::create() );
154 
155  ref_ptr<Bscript::EScriptProgram> program = find_script( filename );
156  if ( program.get() == nullptr )
157  {
158  ERROR_PRINT << "Error reading script " << filename << "\n";
159  throw std::runtime_error( "Error starting script" );
160  }
161 
163  if ( program->haveProgram )
164  {
165  if ( param1 )
166  ex->pushArg( param1 );
167  if ( param0 )
168  ex->pushArg( param0 );
169  }
170  // ex->addModule( new FileExecutorModule( *ex ) );
171  ex->addModule( new Module::UOExecutorModule( *ex ) );
172 
173  if ( !ex->setProgram( program.get() ) )
174  throw std::runtime_error( "Error starting script." );
175 
177 }
178 // EXACTLY the same as start_script, except uses find_script2
180 {
181  Bscript::BObject bobj(
182  param ? param
183  : Bscript::UninitObject::create() ); // just to delete if it doesn't go somewhere else
185  if ( program.get() == nullptr )
186  {
187  ERROR_PRINT << "Error reading script " << script.name() << "\n";
188  // throw runtime_error( "Error starting script" );
189  return nullptr;
190  }
191 
192  std::unique_ptr<UOExecutor> ex( create_script_executor() );
193  if ( program->haveProgram && ( param != nullptr ) )
194  {
195  ex->pushArg( param );
196  }
197  // ex->addModule( new FileExecutorModule( *ex ) );
199  ex->addModule( uoemod );
200 
201  if ( !ex->setProgram( program.get() ) )
202  {
203  return nullptr;
204  // throw runtime_error( "Error starting script." );
205  }
206 
207  scriptScheduler.schedule( ex.release() );
208 
209  return uoemod;
210 }
211 
213  Bscript::BObjectImp* param1, Bscript::BObjectImp* param2,
214  Bscript::BObjectImp* param3 )
215 {
216  Bscript::BObject bobj0( param0 ); // just to delete if it doesn't go somewhere else
217  Bscript::BObject bobj1( param1 );
218  Bscript::BObject bobj2( param2 ? param2 : Bscript::UninitObject::create() );
219  Bscript::BObject bobj3( param3 ? param3 : Bscript::UninitObject::create() );
220 
222  if ( program.get() == nullptr )
223  {
224  ERROR_PRINT << "Error reading script " << script.name() << "\n";
225  // throw runtime_error( "Error starting script" );
226  return nullptr;
227  }
228 
229  std::unique_ptr<UOExecutor> ex( create_script_executor() );
230  if ( program->haveProgram )
231  {
232  if ( param3 != nullptr )
233  ex->pushArg( param3 );
234  if ( param2 != nullptr )
235  ex->pushArg( param2 );
236  if ( param1 != nullptr )
237  ex->pushArg( param1 );
238  if ( param0 != nullptr )
239  ex->pushArg( param0 );
240  }
241  // ex->addModule( new FileExecutorModule( *ex ) );
243  ex->addModule( uoemod );
244 
245  if ( !ex->setProgram( program.get() ) )
246  {
247  return nullptr;
248  // throw runtime_error( "Error starting script." );
249  }
250 
251 
252  scriptScheduler.schedule( ex.release() );
253 
254  return uoemod;
255 }
256 
257 // EXACTLY the same as start_script, except uses find_script2
259  Bscript::BObjectImp* param )
260 {
261  Bscript::BObject bobj(
262  param ? param
263  : Bscript::UninitObject::create() ); // just to delete if it doesn't go somewhere else
264 
266  if ( program->haveProgram && ( param != nullptr ) )
267  {
268  ex->pushArg( param );
269  }
270  // ex->addModule( new FileExecutorModule( *ex ) );
272  ex->addModule( uoemod );
273 
274  if ( !ex->setProgram( program.get() ) )
275  throw std::runtime_error( "Error starting script." );
276 
278 
279  return uoemod;
280 }
281 
283 {
284  using namespace Module;
285  ex.addModule( new BasicExecutorModule( ex ) );
286  ex.addModule( new BasicIoExecutorModule( ex ) );
287  ex.addModule( new ClilocExecutorModule( ex ) );
288  ex.addModule( new MathExecutorModule( ex ) );
289  ex.addModule( new UtilExecutorModule( ex ) );
290  // ex.addModule( new FileExecutorModule( ex ) );
291  ex.addModule( new ConfigFileExecutorModule( ex ) );
292  ex.addModule( new UBoatExecutorModule( ex ) );
293  ex.addModule( new DataFileExecutorModule( ex ) );
294  ex.addModule( new PolSystemExecutorModule( ex ) );
295  ex.addModule( new AttributeExecutorModule( ex ) );
296  ex.addModule( new VitalExecutorModule( ex ) );
297  ex.addModule( new StorageExecutorModule( ex ) );
298  ex.addModule( new GuildExecutorModule( ex ) );
299  ex.addModule( new UnicodeExecutorModule( ex ) );
300  ex.addModule( new PartyExecutorModule( ex ) );
301  ex.addModule( new SQLExecutorModule( ex ) );
303 }
304 
306 {
307  add_common_exmods( ex );
308  ex.addModule( new Module::UOExecutorModule( ex ) );
309 
310  ex.setProgram( prog );
311 
313  ex.set_running_to_completion( true );
314 
316 
317  if ( Plib::systemstate.config.report_rtc_scripts )
318  INFO_PRINT << "Script " << ex.scriptname() << " running..";
319 
320  while ( ex.runnable() )
321  {
322  INFO_PRINT << ".";
323  for ( int i = 0; ( i < 1000 ) && ex.runnable(); i++ )
324  {
326  ex.execInstr();
327  }
328  }
329  INFO_PRINT << "\n";
330  return ( ex.error_ == false );
331 }
332 
333 bool run_script_to_completion( const char* filename, Bscript::BObjectImp* parameter )
334 {
335  passert_always( parameter );
336  Bscript::BObject bobj( parameter );
337  ref_ptr<Bscript::EScriptProgram> program = find_script( filename );
338  if ( program.get() == nullptr )
339  {
340  ERROR_PRINT << "Error reading script " << filename << "\n";
341  return false;
342  }
343 
344  UOExecutor ex;
345  if ( program->haveProgram )
346  {
347  ex.pushArg( parameter );
348  }
349  return run_script_to_completion_worker( ex, program.get() );
350 }
351 
352 bool run_script_to_completion( const char* filename )
353 {
354  ref_ptr<Bscript::EScriptProgram> program = find_script( filename );
355  if ( program.get() == nullptr )
356  {
357  ERROR_PRINT << "Error reading script " << filename << "\n";
358  return false;
359  }
360 
361  UOExecutor ex;
362 
363  return run_script_to_completion_worker( ex, program.get() );
364 }
365 
366 
368 {
370  if ( program.get() == nullptr )
371  {
372  ERROR_PRINT << "Error reading script " << script.name() << "\n";
373  return new Bscript::BError( "Unable to read script" );
374  }
375 
376  add_common_exmods( ex );
377  ex.addModule( new Module::UOExecutorModule( ex ) );
378 
379  ex.setProgram( program.get() );
380 
382  ex.set_running_to_completion( true );
383 
385 
386  int i = 0;
387  bool reported = false;
388  while ( ex.runnable() )
389  {
391  ex.execInstr();
392  if ( ++i == 1000 )
393  {
394  if ( reported )
395  {
396  INFO_PRINT << ".." << ex.PC;
397  }
398  else
399  {
400  if ( Plib::systemstate.config.report_rtc_scripts )
401  {
402  INFO_PRINT << "Script " << script.name() << " running.." << ex.PC;
403  reported = true;
404  }
405  }
406  i = 0;
407  }
408  }
409  if ( reported )
410  INFO_PRINT << "\n";
411  if ( ex.error_ )
412  return new Bscript::BError( "Script exited with an error condition" );
413 
414  if ( ex.ValueStack.empty() )
415  return new Bscript::BLong( 1 );
416  else
417  return ex.ValueStack.back().get()->impptr()->copy();
418 }
419 
421 {
422  UOExecutor ex;
423 
424  return run_executor_to_completion( ex, script );
425 }
426 
427 
429  Bscript::BObjectImp* param1 )
430 {
431  //?? BObject bobj1( param1 );
432 
433  UOExecutor ex;
434 
435  ex.pushArg( param1 );
436 
437  return run_executor_to_completion( ex, script );
438 }
439 
440 
442  Bscript::BObjectImp* param2 )
443 {
444  //?? BObject bobj1( param1 ), bobj2( param2 );
445 
446  UOExecutor ex;
447 
448  ex.pushArg( param2 );
449  ex.pushArg( param1 );
450 
451  return run_executor_to_completion( ex, script );
452 }
453 
455  Bscript::BObjectImp* param2,
456  Bscript::BObjectImp* param3 )
457 {
458  //?? BObject bobj1( param1 ), bobj2( param2 ), bobj3( param3 );
459 
460  UOExecutor ex;
461 
462  ex.pushArg( param3 );
463  ex.pushArg( param2 );
464  ex.pushArg( param1 );
465 
466  return run_executor_to_completion( ex, script );
467 }
468 
470  Bscript::BObjectImp* param2,
471  Bscript::BObjectImp* param3,
472  Bscript::BObjectImp* param4 )
473 {
474  //??BObject bobj1( param1 ), bobj2( param2 ), bobj3( param3 ), bobj4( param4 );
475 
476  UOExecutor ex;
477 
478  ex.pushArg( param4 );
479  ex.pushArg( param3 );
480  ex.pushArg( param2 );
481  ex.pushArg( param1 );
482 
483  return run_executor_to_completion( ex, script );
484 }
485 
487  Bscript::BObjectImp* param2,
488  Bscript::BObjectImp* param3,
489  Bscript::BObjectImp* param4,
490  Bscript::BObjectImp* param5 )
491 {
492  //?? BObject bobj1( param1 ), bobj2( param2 ), bobj3( param3 ),
493  //?? bobj4( param4 ), bobj5( param5 );
494 
495  UOExecutor ex;
496 
497  ex.pushArg( param5 );
498  ex.pushArg( param4 );
499  ex.pushArg( param3 );
500  ex.pushArg( param2 );
501  ex.pushArg( param1 );
502 
503  return run_executor_to_completion( ex, script );
504 }
505 
507  Bscript::BObjectImp* param2,
508  Bscript::BObjectImp* param3,
509  Bscript::BObjectImp* param4,
510  Bscript::BObjectImp* param5,
511  Bscript::BObjectImp* param6 )
512 {
513  //?? BObject bobj1( param1 ), bobj2( param2 ), bobj3( param3 ),
514  //?? bobj4( param4 ), bobj5( param5 );
515 
516  UOExecutor ex;
517 
518  ex.pushArg( param6 );
519  ex.pushArg( param5 );
520  ex.pushArg( param4 );
521  ex.pushArg( param3 );
522  ex.pushArg( param2 );
523  ex.pushArg( param1 );
524 
525  return run_executor_to_completion( ex, script );
526 }
527 
529  const ScriptDef& script, Bscript::BObjectImp* param1, Bscript::BObjectImp* param2,
531  Bscript::BObjectImp* param6, Bscript::BObjectImp* param7 )
532 {
533  UOExecutor ex;
534 
535  ex.pushArg( param7 );
536  ex.pushArg( param6 );
537  ex.pushArg( param5 );
538  ex.pushArg( param4 );
539  ex.pushArg( param3 );
540  ex.pushArg( param2 );
541  ex.pushArg( param1 );
542 
543  return run_executor_to_completion( ex, script );
544 }
545 
546 bool call_script( const ScriptDef& script, Bscript::BObjectImp* param0 )
547 {
548  try
549  {
550  Bscript::BObject ob( run_script_to_completion( script, param0 ) );
551  return ob.isTrue();
552  }
553  catch ( std::exception& ) //...
554  {
555  return false;
556  }
557 }
558 bool call_script( const ScriptDef& script, Bscript::BObjectImp* param0,
559  Bscript::BObjectImp* param1 )
560 {
561  try
562  {
563  Bscript::BObject ob( run_script_to_completion( script, param0, param1 ) );
564  return ob.isTrue();
565  }
566  catch ( std::exception& ) //...
567  {
568  return false;
569  }
570 }
571 bool call_script( const ScriptDef& script, Bscript::BObjectImp* param0, Bscript::BObjectImp* param1,
572  Bscript::BObjectImp* param2 )
573 {
574  try
575  {
576  Bscript::BObject ob( run_script_to_completion( script, param0, param1, param2 ) );
577  return ob.isTrue();
578  }
579  catch ( std::exception& ) //...
580  {
581  return false;
582  }
583 }
584 bool call_script( const ScriptDef& script, Bscript::BObjectImp* param0, Bscript::BObjectImp* param1,
585  Bscript::BObjectImp* param2, Bscript::BObjectImp* param3 )
586 {
587  try
588  {
589  Bscript::BObject ob( run_script_to_completion( script, param0, param1, param2, param3 ) );
590  return ob.isTrue();
591  }
592  catch ( std::exception& ) //...
593  {
594  return false;
595  }
596 }
597 bool call_script( const ScriptDef& script, Bscript::BObjectImp* param0, Bscript::BObjectImp* param1,
598  Bscript::BObjectImp* param2, Bscript::BObjectImp* param3,
599  Bscript::BObjectImp* param4 )
600 {
601  try
602  {
603  Bscript::BObject ob(
604  run_script_to_completion( script, param0, param1, param2, param3, param4 ) );
605  return ob.isTrue();
606  }
607  catch ( std::exception& ) //...
608  {
609  return false;
610  }
611 }
612 bool call_script( const ScriptDef& script, Bscript::BObjectImp* param0, Bscript::BObjectImp* param1,
613  Bscript::BObjectImp* param2, Bscript::BObjectImp* param3,
614  Bscript::BObjectImp* param4, Bscript::BObjectImp* param5 )
615 {
616  try
617  {
618  Bscript::BObject ob(
619  run_script_to_completion( script, param0, param1, param2, param3, param4, param5 ) );
620  return ob.isTrue();
621  }
622  catch ( std::exception& ) //...
623  {
624  return false;
625  }
626 }
627 bool call_script( const ScriptDef& script, Bscript::BObjectImp* param0, Bscript::BObjectImp* param1,
628  Bscript::BObjectImp* param2, Bscript::BObjectImp* param3,
629  Bscript::BObjectImp* param4, Bscript::BObjectImp* param5,
630  Bscript::BObjectImp* param6 )
631 {
632  try
633  {
634  Bscript::BObject ob( run_script_to_completion( script, param0, param1, param2, param3, param4,
635  param5, param6 ) );
636  return ob.isTrue();
637  }
638  catch ( std::exception& ) //...
639  {
640  return false;
641  }
642 }
643 
645 {
646  UOExecutor* ex = new UOExecutor();
647 
648  add_common_exmods( *ex );
649  // ex->addModule( new UOExecutorModule( *ex ) );
650  return ex;
651 }
652 
654 {
655  std::unique_ptr<UOExecutor> ex( new UOExecutor );
656 
657  add_common_exmods( *ex );
658  ex->addModule( new Module::UOExecutorModule( *ex ) );
659  return ex.release();
660 }
661 
663 {
664  if ( ex->runnable() )
665  {
667  }
668  else
669  {
670  delete ex;
671  }
672 }
673 
674 /*
675 void deschedule_executor( UOExecutor* ex )
676 {
677  for ( ExecList::iterator itr = scriptEngineInternalManager.runlist.begin(),
678  itrend = scriptEngineInternalManager.runlist.end();
679  itr != itrend; ++itr )
680  {
681  if ( *itr == ex )
682  {
683  scriptEngineInternalManager.runlist.erase( itr );
684  break;
685  }
686  }
687  for ( ExecList::iterator itr = scriptEngineInternalManager.ranlist.begin(),
688  itrend = scriptEngineInternalManager.ranlist.end();
689  itr != itrend; ++itr )
690  {
691  if ( *itr == ex )
692  {
693  scriptEngineInternalManager.ranlist.erase( itr );
694  break;
695  }
696  }
697  if ( ex->os_module->blocked_ )
698  {
699  if ( ex->os_module->in_hold_list_ == Module::OSExecutorModule::TIMEOUT_LIST )
700  {
701  scriptEngineInternalManager.holdlist.erase( ex->os_module->hold_itr_ );
702  ex->os_module->in_hold_list_ = Module::OSExecutorModule::NO_LIST;
703  }
704  else if ( ex->os_module->in_hold_list_ == Module::OSExecutorModule::NOTIMEOUT_LIST )
705  {
706  scriptEngineInternalManager.notimeoutholdlist.erase( ex );
707  ex->os_module->in_hold_list_ = Module::OSExecutorModule::NO_LIST;
708  }
709  }
710  if ( ex->os_module->in_hold_list_ == Module::OSExecutorModule::DEBUGGER_LIST )
711  {
712  scriptEngineInternalManager.debuggerholdlist.erase( ex );
713  ex->os_module->in_hold_list_ = Module::OSExecutorModule::NO_LIST;
714  }
715 }
716 */
717 
718 void list_script( UOExecutor* uoexec )
719 {
720  fmt::Writer tmp;
721  tmp << uoexec->prog_->name.get();
722  if ( !uoexec->Globals2.empty() )
723  tmp << " Gl=" << uoexec->Globals2.size();
724  if ( uoexec->Locals2 && !uoexec->Locals2->empty() )
725  tmp << " Lc=" << uoexec->Locals2->size();
726  if ( !uoexec->ValueStack.empty() )
727  tmp << " VS=" << uoexec->ValueStack.size();
728  if ( !uoexec->upperLocals2.empty() )
729  tmp << " UL=" << uoexec->upperLocals2.size();
730  if ( !uoexec->ControlStack.empty() )
731  tmp << " CS=" << uoexec->ControlStack.size();
732  INFO_PRINT << tmp.str() << "\n";
733 }
734 
735 void list_scripts( const char* desc, const ExecList& ls )
736 {
737  INFO_PRINT << desc << " scripts:\n";
738  for ( auto& exec : ls )
739  {
740  list_script( exec );
741  }
742 }
743 
745 {
746  list_scripts( "running", scriptScheduler.getRunlist() );
747  // list_scripts( "holding", holdlist );
749 }
750 
752 {
753  if ( uoexec->os_module->critical )
754  list_script( uoexec );
755 }
756 void list_crit_scripts( const char* desc, const ExecList& ls )
757 {
758  INFO_PRINT << desc << " scripts:\n";
759  for ( auto& exec : ls )
760  {
761  list_crit_script( exec );
762  }
763 }
764 
766 {
768  // list_crit_scripts( "holding", holdlist );
770 }
771 }
772 }
void list_crit_script(UOExecutor *uoexec)
Definition: scrsched.cpp:751
const ExecList & getRanlist()
ref_ptr< Bscript::EScriptProgram > find_script2(const ScriptDef &script, bool complain_if_not_found, bool cache_script)
Definition: scrstore.cpp:83
void setDebugLevel(DEBUG_LEVEL level)
Definition: executor.h:369
ValueStackCont ValueStack
Definition: executor.h:120
SystemState systemstate
Definition: systemstate.cpp:12
std::string scripts_thread_script
Definition: passert.cpp:36
polclock_t polclock()
Definition: polclock.cpp:72
bool find_uoexec(unsigned int pid, UOExecutor **pp_uoexec)
Definition: scrsched.cpp:60
const HoldList & getHoldlist()
void addModule(ExecutorModule *module)
Definition: executor.cpp:3032
T * get() const
Definition: refptr.h:176
void list_scripts(const char *desc, const ExecList &ls)
Definition: scrsched.cpp:735
bool find_exec(unsigned int pid, UOExecutor **exec)
#define THREAD_CHECKPOINT(thread, check)
Definition: polsig.h:48
u64 pid
Definition: osmod.cpp:945
const ExecList & getRunlist()
ProfileVars profilevars
Definition: state.h:47
const std::string & name() const
Definition: scrdef.h:45
void pushArg(BObjectImp *arg)
Definition: executor.cpp:3021
bool call_script(const ScriptDef &script, Bscript::BObjectImp *param0)
Definition: scrsched.cpp:546
BObjectRefVec Globals2
Definition: executor.h:109
UOExecutor * create_full_script_executor()
Definition: scrsched.cpp:653
UOExecutor * create_script_executor()
Definition: scrsched.cpp:644
std::vector< ReturnContext > ControlStack
Definition: executor.h:113
std::vector< BObjectRefVec * > upperLocals2
Definition: executor.h:111
polclock_t calc_script_clocksleft(polclock_t now)
Definition: scrsched.cpp:111
std::deque< UOExecutor * > ExecList
bool run_script_to_completion_worker(UOExecutor &ex, Bscript::EScriptProgram *prog)
Definition: scrsched.cpp:305
bool setProgram(EScriptProgram *prog)
Definition: executor.cpp:731
static UninitObject * create()
Definition: bobject.h:482
#define passert(exp)
Definition: passert.h:62
int polclock_t
Definition: polclock.h:26
Core::polclock_t sleep_until_clock_
Definition: osmod.h:112
void check_blocked(polclock_t *pclocksleft)
Definition: scrsched.cpp:71
void list_script(UOExecutor *uoexec)
Definition: scrsched.cpp:718
void run_ready(void)
Definition: scrsched.cpp:65
bool runnable() const
Definition: executor.h:428
StateManager stateManager
Definition: state.cpp:8
ScriptScheduler scriptScheduler
void step_scripts(polclock_t *clocksleft, bool *pactivity)
Definition: scrsched.cpp:133
const std::string & scriptname() const
Definition: executor.h:413
void add_common_exmods(Core::UOExecutor &ex)
Definition: scrsched.cpp:282
bool isTrue() const
Definition: bobject.h:384
void schedule(UOExecutor *exec)
ExecutorModule * CreateFileAccessExecutorModule(Executor &exec)
Definition: filemod.cpp:299
bool run_script_to_completion(const char *filename, Bscript::BObjectImp *parameter)
Definition: scrsched.cpp:333
#define ERROR_PRINT
Definition: logfacility.h:230
const NoTimeoutHoldList & getNoTimeoutHoldlist()
void list_crit_scripts(const char *desc, const ExecList &ls)
Definition: scrsched.cpp:756
void schedule_executor(UOExecutor *ex)
Definition: scrsched.cpp:662
BObjectRefVec * Locals2
Definition: executor.h:115
ref_ptr< Bscript::EScriptProgram > find_script(const std::string &name, bool complain_if_not_found, bool cache_script)
Definition: scrstore.cpp:38
#define passert_always(exp)
Definition: passert.h:80
#define INFO_PRINT
Definition: logfacility.h:223
void start_script(const char *filename, Bscript::BObjectImp *param0, Bscript::BObjectImp *param1)
Definition: scrsched.cpp:150
void set_running_to_completion(bool to_completion)
Definition: executor.h:471
Definition: berror.cpp:12
const polclock_t POLCLOCKS_PER_SEC
Definition: polclock.h:29
BObjectImp * run_executor_to_completion(UOExecutor &ex, const ScriptDef &script)
Definition: scrsched.cpp:367
Module::OSExecutorModule * os_module
Definition: uoexec.h:37
unsigned scripts_thread_scriptPC
Definition: passert.cpp:37
#define INC_PROFILEVAR(counter)
Definition: profile.h:85