Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
htop
Commits
6f868b00
Commit
6f868b00
authored
10 years ago
by
Hisham Muhammad
Browse files
Options
Download
Email Patches
Plain Diff
Fix allocation of processes. Closes #166.
parent
f97d1bc5
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
Process.c
+2
-7
Process.c
Process.h
+2
-2
Process.h
ProcessList.c
+0
-1
ProcessList.c
ScreenManager.c
+0
-12
ScreenManager.c
linux/LinuxProcess.c
+16
-0
linux/LinuxProcess.c
linux/LinuxProcess.h
+6
-0
linux/LinuxProcess.h
linux/LinuxProcessList.c
+3
-2
linux/LinuxProcessList.c
linux/Platform.c
+1
-0
linux/Platform.c
linux/Platform.h
+1
-0
linux/Platform.h
with
31 additions
and
24 deletions
+31
-24
Process.c
View file @
6f868b00
...
...
@@ -647,14 +647,12 @@ static void Process_display(Object* cast, RichString* out) {
assert
(
out
->
chlen
>
0
);
}
void
Process_delete
(
Object
*
cast
)
{
Process
*
this
=
(
Process
*
)
cast
;
void
Process_done
(
Process
*
this
)
{
assert
(
this
!=
NULL
);
free
(
this
->
comm
);
#ifdef HAVE_CGROUP
free
(
this
->
cgroup
);
#endif
free
(
this
);
}
ObjectClass
Process_class
=
{
...
...
@@ -664,9 +662,7 @@ ObjectClass Process_class = {
.
compare
=
Process_compare
};
Process
*
Process_new
(
struct
Settings_
*
settings
)
{
Process
*
this
=
calloc
(
1
,
sizeof
(
Process
));
Object_setClass
(
this
,
Class
(
Process
));
void
Process_init
(
Process
*
this
,
struct
Settings_
*
settings
)
{
this
->
pid
=
0
;
this
->
settings
=
settings
;
this
->
tag
=
false
;
...
...
@@ -682,7 +678,6 @@ Process* Process_new(struct Settings_* settings) {
this
->
cgroup
=
NULL
;
#endif
if
(
Process_getuid
==
-
1
)
Process_getuid
=
getuid
();
return
this
;
}
void
Process_toggleTag
(
Process
*
this
)
{
...
...
This diff is collapsed.
Click to expand it.
Process.h
View file @
6f868b00
...
...
@@ -191,11 +191,11 @@ void Process_setupColumnWidths();
void
Process_writeDefaultField
(
Process
*
this
,
RichString
*
str
,
ProcessField
field
);
void
Process_d
elete
(
Object
*
cast
);
void
Process_d
one
(
Process
*
this
);
extern
ObjectClass
Process_class
;
Process
*
Process
_new
(
struct
Settings_
*
settings
);
void
Process
_init
(
Process
*
this
,
struct
Settings_
*
settings
);
void
Process_toggleTag
(
Process
*
this
);
...
...
This diff is collapsed.
Click to expand it.
ProcessList.c
View file @
6f868b00
...
...
@@ -241,7 +241,6 @@ void ProcessList_expandTree(ProcessList* this) {
}
void
ProcessList_rebuildPanel
(
ProcessList
*
this
)
{
int
following
=
this
->
following
;
const
char
*
incFilter
=
this
->
incFilter
;
int
currPos
=
Panel_getSelectedIndex
(
this
->
panel
);
...
...
This diff is collapsed.
Click to expand it.
ScreenManager.c
View file @
6f868b00
...
...
@@ -158,26 +158,20 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
double
newTime
=
((
double
)
tv
.
tv_sec
*
10
)
+
((
double
)
tv
.
tv_usec
/
100000
);
timeToRecalculate
=
(
newTime
-
oldTime
>
this
->
settings
->
delay
);
if
(
newTime
<
oldTime
)
timeToRecalculate
=
true
;
// clock was adjusted?
//fprintf(stderr, "\n%p %f ", this, newTime);
if
(
doRefresh
)
{
if
(
timeToRecalculate
||
forceRecalculate
)
{
ProcessList_scan
(
this
->
header
->
pl
);
//fprintf(stderr, "scan ");
}
//fprintf(stderr, "sortTo=%d ", sortTimeout);
if
(
sortTimeout
==
0
||
this
->
settings
->
treeView
)
{
ProcessList_sort
(
this
->
header
->
pl
);
//fprintf(stderr, "sort ");
sortTimeout
=
1
;
}
//this->header->pl->incFilter = IncSet_filter(inc);
ProcessList_rebuildPanel
(
this
->
header
->
pl
);
//fprintf(stderr, "rebuild ");
drawPanel
=
true
;
}
if
(
timeToRecalculate
||
forceRecalculate
)
{
Header_draw
(
this
->
header
);
//fprintf(stderr, "drawHeader ");
oldTime
=
newTime
;
forceRecalculate
=
false
;
}
...
...
@@ -188,7 +182,6 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
for
(
int
i
=
0
;
i
<
panels
;
i
++
)
{
Panel
*
panel
=
(
Panel
*
)
Vector_get
(
this
->
panels
,
i
);
Panel_draw
(
panel
,
i
==
focus
);
//fprintf(stderr, "drawPanel ");
if
(
i
<
panels
)
{
if
(
this
->
orientation
==
HORIZONTAL
)
{
mvvline
(
panel
->
y
,
panel
->
x
+
panel
->
w
,
' '
,
panel
->
h
+
1
);
...
...
@@ -206,8 +199,6 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
int
prevCh
=
ch
;
ch
=
getch
();
//fprintf(stderr, "ch=%d ", ch);
if
(
ch
==
KEY_MOUSE
)
{
MEVENT
mevent
;
int
ok
=
getmouse
(
&
mevent
);
...
...
@@ -260,7 +251,6 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
}
else
closeTimeout
=
0
;
drawPanel
=
false
;
//fprintf(stderr, "err ");
continue
;
}
drawPanel
=
true
;
...
...
@@ -300,12 +290,10 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
quit
=
true
;
continue
;
default:
//fprintf(stderr, "onKey ");
sortTimeout
=
resetSortTimeout
;
Panel_onKey
(
panelFocus
,
ch
);
break
;
}
//fprintf(stderr, "loop ");
}
if
(
lastFocus
)
...
...
This diff is collapsed.
Click to expand it.
linux/LinuxProcess.c
View file @
6f868b00
...
...
@@ -10,6 +10,7 @@ in the source distribution for its full text.
#include "LinuxProcess.h"
#include "CRT.h"
#include <stdlib.h>
#include <unistd.h>
#include <sys/syscall.h>
...
...
@@ -22,8 +23,23 @@ typedef struct LinuxProcess_ {
IOPriority ioPriority;
} LinuxProcess;
#define Process_delete LinuxProcess_delete
}*/
LinuxProcess
*
LinuxProcess_new
(
Settings
*
settings
)
{
LinuxProcess
*
this
=
calloc
(
sizeof
(
LinuxProcess
),
1
);
Process_init
(
&
this
->
super
,
settings
);
return
this
;
}
void
LinuxProcess_delete
(
Object
*
cast
)
{
LinuxProcess
*
this
=
(
LinuxProcess
*
)
this
;
Object_setClass
(
this
,
Class
(
Process
));
Process_done
((
Process
*
)
cast
);
free
(
this
);
}
/*
[1] Note that before kernel 2.6.26 a process that has not asked for
an io priority formally uses "none" as scheduling class, but the
...
...
This diff is collapsed.
Click to expand it.
linux/LinuxProcess.h
View file @
6f868b00
...
...
@@ -17,6 +17,12 @@ typedef struct LinuxProcess_ {
IOPriority
ioPriority
;
}
LinuxProcess
;
#define Process_delete LinuxProcess_delete
LinuxProcess
*
LinuxProcess_new
(
Settings
*
settings
);
void
LinuxProcess_delete
(
Object
*
cast
);
/*
[1] Note that before kernel 2.6.26 a process that has not asked for
...
...
This diff is collapsed.
Click to expand it.
linux/LinuxProcessList.c
View file @
6f868b00
...
...
@@ -375,6 +375,7 @@ static void LinuxProcessList_readCGroupFile(Process* process, const char* dirnam
int
nFields
;
char
**
fields
=
String_split
(
trimmed
,
':'
,
&
nFields
);
free
(
trimmed
);
free
(
process
->
cgroup
);
if
(
nFields
>=
3
)
{
process
->
cgroup
=
strndup
(
fields
[
2
]
+
1
,
10
);
}
else
{
...
...
@@ -521,7 +522,7 @@ static bool LinuxProcessList_processEntries(LinuxProcessList* this, const char*
process
=
existingProcess
;
assert
(
process
->
pid
==
pid
);
}
else
{
process
=
Process_new
(
settings
);
process
=
(
Process
*
)
Linux
Process_new
(
settings
);
assert
(
process
->
comm
==
NULL
);
process
->
pid
=
pid
;
process
->
tgid
=
parent
?
parent
->
pid
:
pid
;
...
...
@@ -625,7 +626,7 @@ static bool LinuxProcessList_processEntries(LinuxProcessList* this, const char*
if
(
existingProcess
)
ProcessList_remove
((
ProcessList
*
)
this
,
process
);
else
Process_delete
((
Object
*
)
process
);
Linux
Process_delete
((
Object
*
)
process
);
}
}
closedir
(
dir
);
...
...
This diff is collapsed.
Click to expand it.
linux/Platform.c
View file @
6f868b00
...
...
@@ -29,6 +29,7 @@ in the source distribution for its full text.
#include "Action.h"
#include "MainPanel.h"
#include "BatteryMeter.h"
#include "LinuxProcess.h"
}*/
static
Htop_Reaction
Platform_actionSetIOPriority
(
State
*
st
)
{
...
...
This diff is collapsed.
Click to expand it.
linux/Platform.h
View file @
6f868b00
...
...
@@ -12,6 +12,7 @@ in the source distribution for its full text.
#include "Action.h"
#include "MainPanel.h"
#include "BatteryMeter.h"
#include "LinuxProcess.h"
void
Platform_setBindings
(
Htop_Action
*
keys
);
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment