From 398cbdac8dea58afb1a04e12f39cc90c991217ca Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Wed, 17 Sep 2003 07:36:33 +0000 Subject: [PATCH] Fixed bug (mutex release) in client display update. Added additional configurable JS operation parameters. --- src/sbbs3/ctrl/MainFormUnit.cpp | 71 +++++++++++++++++++++++++++------ src/sbbs3/ctrl/MainFormUnit.h | 6 ++- 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp index 5a4adf94ce..622bc504f3 100644 --- a/src/sbbs3/ctrl/MainFormUnit.cpp +++ b/src/sbbs3/ctrl/MainFormUnit.cpp @@ -167,8 +167,11 @@ static void client_on(BOOL on, int sock, client_t* client, BOOL update) break; } if(i>=ClientForm->ListView->Items->Count) { - if(update) /* Can't update a non-existing entry */ + if(update) { /* Can't update a non-existing entry */ + ReleaseMutex(mutex); + ReleaseMutex(ClientForm->ListMutex); return; + } i=-1; } @@ -282,7 +285,8 @@ static void bbs_start(void) SAFECOPY(MainForm->bbs_startup.host_name ,MainForm->Hostname.c_str()); MainForm->bbs_startup.sem_chk_freq=MainForm->SemFileCheckFrequency; - MainForm->bbs_startup.js_max_bytes=MainForm->JS_MaxBytes; + MainForm->bbs_startup.js_max_bytes=MainForm->js_max_bytes; + MainForm->bbs_startup.js_cx_stack=MainForm->js_cx_stack; _beginthread((void(*)(void*))bbs_thread,0,&MainForm->bbs_startup); Application->ProcessMessages(); } @@ -587,7 +591,8 @@ static void ftp_start(void) SAFECOPY(MainForm->ftp_startup.host_name ,MainForm->Hostname.c_str()); MainForm->ftp_startup.sem_chk_freq=MainForm->SemFileCheckFrequency; - MainForm->ftp_startup.js_max_bytes=MainForm->JS_MaxBytes; + MainForm->ftp_startup.js_max_bytes=MainForm->js_max_bytes; + MainForm->ftp_startup.js_cx_stack=MainForm->js_cx_stack; _beginthread((void(*)(void*))ftp_server,0,&MainForm->ftp_startup); Application->ProcessMessages(); } @@ -601,7 +606,11 @@ __fastcall TMainForm::TMainForm(TComponent* Owner) CtrlDirectory="c:\\sbbs\\ctrl\\"; LoginCommand="telnet://localhost"; ConfigCommand="%sscfg.exe %s -l25"; - JS_MaxBytes=JAVASCRIPT_MAX_BYTES; + js_max_bytes=JAVASCRIPT_MAX_BYTES; + js_cx_stack=JAVASCRIPT_CONTEXT_STACK; + js_branch_limit=JAVASCRIPT_BRANCH_LIMIT; + js_gc_interval=JAVASCRIPT_GC_INTERVAL; + js_yield_interval=JAVASCRIPT_YIELD_INTERVAL; MinimizeToSysTray=false; UndockableForms=false; NodeDisplayInterval=1; /* seconds */ @@ -843,7 +852,8 @@ void __fastcall TMainForm::ServicesStartExecute(TObject *Sender) SAFECOPY(MainForm->services_startup.host_name ,MainForm->Hostname.c_str()); MainForm->services_startup.sem_chk_freq=SemFileCheckFrequency; - MainForm->services_startup.js_max_bytes=MainForm->JS_MaxBytes; + MainForm->services_startup.js_max_bytes=MainForm->js_max_bytes; + MainForm->services_startup.js_cx_stack=MainForm->js_cx_stack; _beginthread((void(*)(void*))services_thread,0,&MainForm->services_startup); Application->ProcessMessages(); } @@ -1413,10 +1423,22 @@ void __fastcall TMainForm::StartupTimerTick(TObject *Sender) if(Registry->ValueExists("MaxLogLen")) MaxLogLen=Registry->ReadInteger("MaxLogLen"); + + /* JavaScript Operating Parameters */ if(Registry->ValueExists("JS_MaxBytes")) - JS_MaxBytes=Registry->ReadInteger("JS_MaxBytes"); - if(JS_MaxBytes==0) - JS_MaxBytes=JAVASCRIPT_MAX_BYTES; + js_max_bytes=Registry->ReadInteger("JS_MaxBytes"); + if(js_max_bytes==0) + js_max_bytes=JAVASCRIPT_MAX_BYTES; + if(Registry->ValueExists("JS_ContextStack")) + js_cx_stack=Registry->ReadInteger("JS_ContextStack"); + if(js_cx_stack==0) + js_cx_stack=JAVASCRIPT_CONTEXT_STACK; + if(Registry->ValueExists("JS_BranchLimit")) + js_branch_limit=Registry->ReadInteger("JS_BranchLimit"); + if(Registry->ValueExists("JS_GcInterval")) + js_gc_interval=Registry->ReadInteger("JS_GcInterval"); + if(Registry->ValueExists("JS_YieldInterval")) + js_yield_interval=Registry->ReadInteger("JS_YieldInterval"); if(Registry->ValueExists("LoginCommand")) LoginCommand=Registry->ReadString("LoginCommand"); @@ -1872,7 +1894,14 @@ void __fastcall TMainForm::SaveSettings(TObject* Sender) Registry->WriteString("CtrlDirectory",CtrlDirectory); Registry->WriteString("TempDirectory",TempDirectory); Registry->WriteInteger("MaxLogLen",MaxLogLen); - Registry->WriteInteger("JS_MaxBytes",JS_MaxBytes); + + /* JavaScript Operating Parameters */ + Registry->WriteInteger("JS_MaxBytes",js_max_bytes); + Registry->WriteInteger("JS_ContextStack",js_cx_stack); + Registry->WriteInteger("JS_BranchLimit",js_branch_limit); + Registry->WriteInteger("JS_GcInterval",js_gc_interval); + Registry->WriteInteger("JS_YieldInterval",js_yield_interval); + Registry->WriteString("LoginCommand",LoginCommand); Registry->WriteString("ConfigCommand",ConfigCommand); Registry->WriteString("Password",Password); @@ -2327,7 +2356,11 @@ void __fastcall TMainForm::ExportSettings(TObject* Sender) IniFile->WriteString(section,"Hostname",Hostname); IniFile->WriteString(section,"CtrlDirectory",CtrlDirectory); IniFile->WriteString(section,"TempDirectory",TempDirectory); - IniFile->WriteInteger(section,"JavaScriptMaxBytes",JS_MaxBytes); + IniFile->WriteInteger(section,strJavaScriptMaxBytes,js_max_bytes); + IniFile->WriteInteger(section,strJavaScriptContextStack,js_cx_stack); + IniFile->WriteInteger(section,strJavaScriptBranchLimit,js_branch_limit); + IniFile->WriteInteger(section,strJavaScriptGcInterval,js_gc_interval); + IniFile->WriteInteger(section,strJavaScriptYieldInterval,js_yield_interval); /***********************************************************************/ section = "BBS"; @@ -2803,7 +2836,12 @@ void __fastcall TMainForm::PropertiesExecute(TObject *Sender) PropertiesDlg->TrayIconCheckBox->Checked=MinimizeToSysTray; PropertiesDlg->UndockableCheckBox->Checked=UndockableForms; PropertiesDlg->PasswordEdit->Text=Password; - PropertiesDlg->JS_MaxBytesEdit->Text=IntToStr(JS_MaxBytes); + PropertiesDlg->JS_MaxBytesEdit->Text=IntToStr(js_max_bytes); + PropertiesDlg->JS_ContextStackEdit->Text=IntToStr(js_cx_stack); + PropertiesDlg->JS_BranchLimitEdit->Text=IntToStr(js_branch_limit); + PropertiesDlg->JS_GcIntervalEdit->Text=IntToStr(js_gc_interval); + PropertiesDlg->JS_YieldIntervalEdit->Text=IntToStr(js_yield_interval); + if(MaxLogLen==0) PropertiesDlg->MaxLogLenEdit->Text="<unlimited>"; else @@ -2820,8 +2858,17 @@ void __fastcall TMainForm::PropertiesExecute(TObject *Sender) SemFileCheckFrequency=PropertiesDlg->SemFreqUpDown->Position; MinimizeToSysTray=PropertiesDlg->TrayIconCheckBox->Checked; UndockableForms=PropertiesDlg->UndockableCheckBox->Checked; - JS_MaxBytes + js_max_bytes =PropertiesDlg->JS_MaxBytesEdit->Text.ToIntDef(JAVASCRIPT_MAX_BYTES); + js_cx_stack + =PropertiesDlg->JS_ContextStackEdit->Text.ToIntDef(JAVASCRIPT_CONTEXT_STACK); + js_branch_limit + =PropertiesDlg->JS_BranchLimitEdit->Text.ToIntDef(JAVASCRIPT_BRANCH_LIMIT); + js_gc_interval + =PropertiesDlg->JS_GcIntervalEdit->Text.ToIntDef(JAVASCRIPT_GC_INTERVAL); + js_yield_interval + =PropertiesDlg->JS_YieldIntervalEdit->Text.ToIntDef(JAVASCRIPT_YIELD_INTERVAL); + MaxLogLen =PropertiesDlg->MaxLogLenEdit->Text.ToIntDef(0); SaveSettings(Sender); diff --git a/src/sbbs3/ctrl/MainFormUnit.h b/src/sbbs3/ctrl/MainFormUnit.h index 6c338a3e0c..26100865c6 100644 --- a/src/sbbs3/ctrl/MainFormUnit.h +++ b/src/sbbs3/ctrl/MainFormUnit.h @@ -364,7 +364,11 @@ public: // User declarations AnsiString LoginCommand; AnsiString ConfigCommand; AnsiString Password; - DWORD JS_MaxBytes; + DWORD js_max_bytes; + DWORD js_cx_stack; + DWORD js_branch_limit; + DWORD js_gc_interval; + DWORD js_yield_interval; bool MinimizeToSysTray; bool UndockableForms; scfg_t cfg; -- GitLab