After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 121246 - bonobo-activation-server uses excessive resources after app exit
bonobo-activation-server uses excessive resources after app exit
Status: RESOLVED FIXED
Product: bonobo-activation [was: oaf]
Classification: Deprecated
Component: general
cvs (head)
Other Linux
: Urgent critical
: ---
Assigned To: Michael Meeks
Luis Villa
Depends on:
Blocks:
 
 
Reported: 2003-09-02 09:51 UTC by david.hawthorne
Modified: 2004-12-22 21:47 UTC
See Also:
GNOME target: ---
GNOME version: 2.3/2.4


Attachments
Proposed patch (2.10 KB, patch)
2003-09-05 08:46 UTC, padraig.obriain
none Details | Review

Description david.hawthorne 2003-09-02 09:51:42 UTC
using a gnome-2.4 nightly build from 01/09/03.

-launch a gnome-session
-run 'top' and note the cpu usage
-launch an app such as gok, gnopernicus, SwingSet, gedit
-close the app
-run 'top' again, and note how bonobo is using as much as 95% of CPU time.

.this won't reset until bonobo is killed, and even then it will reoccur on
exit of the next app.
Comment 1 padraig.obriain 2003-09-02 10:13:05 UTC
The process in question is bonobo-activation-server.
Comment 2 padraig.obriain 2003-09-02 13:09:26 UTC
The problem ocurs on linux but not on Solaris.
Comment 3 Michael Meeks 2003-09-02 13:37:27 UTC
An strace (truss) of the badly behaved process would be extremely
helpful - to see what it's trying to do,

Also, an lsof -p <pid> would be nice,

Clearly something nasty is happening (probably in the child-forking
sub-loop).

That is - unless in fact it's some client idly belting it with some
complex query somehow;
Comment 4 padraig.obriain 2003-09-04 09:31:36 UTC
In b-a-s when LincConnection is broken, the broken signal handler
active_client_cnx_broken is called. This function calls
activation_clients_is_empty_scan which calls
ORBit_small_get_connection_status for each connection.

This causes an attempt to be made to reconnect the LincCopnnection
which was just reported as being broken. On Solaris the connect system
call returned ECONNREFUSED and everything works as expected.

On Linux we are seeing the connect system call returning EINPROGRESS.
This causes link_wait to be called in link_connection_wait_connected_T
unlil the connection is resolved. When the connection is nrefused the
"broken" signal is again emitted and active_client_cnx_broken is
called again.

There do not seem to have been any code changes recently which would
have cause a change in behavior so it seems that this problem has
always been there.

One possible solution would be to not emit the "broken" signal if
link_connection_try_reconnect is being called. This will require
adding a field to LincConnectionPrivate.

Comment 5 Michael Meeks 2003-09-04 14:47:52 UTC
That sounds great Padraig; please do hack that up, and post it to the
release team for approval.

Thanks muchly.
Comment 6 padraig.obriain 2003-09-05 08:46:35 UTC
Created attachment 19762 [details] [review]
Proposed patch
Comment 7 padraig.obriain 2003-09-08 11:01:54 UTC
Patch committed to CVS HEAD.