Fix ghost threads in CPU

* kernel: Make sf9 return TSTATE_FREE for invalid slots: 0, >255, free.
* menu: Ignore free slots even if other fields of proc_info look valid.
        Documentation (sysfuncs.txt) clearly states all the other info
        as invalid when slot_state is TSTATE_FREE.
* taskbar: Same as menu.
* cmm/lib/*: Same as menu.
* programs/macros.inc: Add TSTATE_* macros.
This commit is contained in:
2025-02-01 02:53:14 +00:00
parent 6933ee64cd
commit d235c8914c
6 changed files with 39 additions and 28 deletions

View File

@@ -15,10 +15,12 @@ enum {
:bool CheckProcessExists(dword proc_name) {
int i;
proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++;)
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
GetProcessInfo(#Process, i);
if (strcmpi(#Process.name, proc_name)==0) return 1;
if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0)
return 1;
}
return 0;
}
@@ -26,12 +28,13 @@ enum {
:void KillProcessByName(dword proc_name, byte multiple) {
int i;
proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++;)
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
GetProcessInfo(#Process, i);
if (strcmpi(#Process.name, proc_name)==0)
{
KillProcess(Process.ID);
if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0)
{
KillProcess(Process.ID);
if (multiple==SINGLE) break;
}
}
@@ -40,10 +43,12 @@ enum {
:int GetProcessesCount(dword proc_name) {
int i, count=0;
proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++;)
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
GetProcessInfo(#Process, i);
if (strcmpi(#Process.name, proc_name)==0) count++;
if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0)
count++;
}
return count;
}
@@ -57,7 +62,7 @@ enum {
int i;
proc_info Process, Self;
GetProcessInfo(#Self, -1);
for (i=0; i<MAX_PROCESS_COUNT; i++;)
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
GetProcessInfo(#Process, i);
if (Process.name)
@@ -68,4 +73,4 @@ enum {
RunProgram("/sys/launcher", NULL);
}
#endif
#endif