Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Apr 2003 05:27:38 +0900 (JST)
From:      BugsGrief@bugsgrief.net
To:        FreeBSD-STABLE@FreeBSD.ORG
Subject:   fontconfig-2.1.93 considered more harmful
Message-ID:  <20030417.202738.36fbf3aaf09226c2.10.0.3.9@bugsgrief.net>

next in thread | raw e-mail | index | archive | help
There is an ongoing thread "fontconfig-2.1.92 considered harmful" on -CURRENT.
Because I have not moved to -CURRENT, I post this to -STABLE.

Since I upgraded to fontconfig-2.1.93 (on Apr 14) a lot of ports start to
complain a lot of "Cannot fork: Resource temporarily unavailable" errors.

What resource ? I inserted top into my ports build script to notice that
a lot of processes were running. Interactive top shows all these are make !

+ top -bu -d2 -s1 0
+ sed -e /^  .*/d -e /^[   ]*$/d
+ sed 1,4d
last pid: 29052;  load averages:  3.40,  2.75,  1.56  up 42+16:35:08    07:45:52
1005 processes:3 running, 999 sleeping, 3 zombie
CPU states:  0.0% user, 29.6% nice, 63.5% system,  0.4% interrupt,  6.4% idle
Mem: 34M Active, 13M Inact, 65M Wired, 5116K Cache, 22M Buf, 6340K Free
Swap: 1152M Total, 300M Used, 852M Free, 26% Inuse

After a little poking around bsd.port.mk, I found make package-depends (also
make all-depends-list) stably reproduce the problem on failing ports.
Turned out the port I tested is suffering from dependency loop that cause
repeated make calls. But why so many ports fail ? Are they all harmed by
similar loops ? So I tried to lookup ports dependency tree(s).

Voila ! Found a few circular dependencies. Since I'm not using ports-all,
and also the tool I relied on (tsort) is not the tool to primarily detect
cycles (it detects cycles only as its byproduct), this list is not exhaustive.

Most of the cycles I found so far contain XFree86-4-libraries -> fontconfig
dependency. Other circles are small : gtkhtml (it depends on itself) and
gtkhtml -> gnomecore. Also, note that {XFree86-4-libraries} and {fontconfig}
are the only minimal cutsets that resolve all the circles excepts for these
small circles (these loops are resolved by a little weird mechanism).

For brevity only the longest circles are shown. A lot of subcircles exist.


1. Small circles that don't include XFree86-4-libraries -> fontconfig.

	gtkhtml -> gnomecore

2. fontconfig LIB_DEPENS on gtk12, gtkhtml, imlib and they in turn reference
   XFree86-4-libraries.

All cycles include XFree86-4-libraries -> fontconfig sequence at the top
(or tail) of the sequences.

	gtkhtml -> gtk12 ->
	gtkhtml -> gnomecore -> gnomelibs -> scrollkeeper -> gnomehier ->
	imlib -> libungif ->
	imlib -> gtk12 ->

3. fontconfig directly or indirectly RUN_DEPENDS on gnomecontrolcenter
   which in turn depends back to XFree86-4-libraries.

All cycles include XFree86-4-libraries -> fontconfig -> gtkhtml ->
gnomecore -> gnomecontrolcenter sequence at the top (or tail) of
the sequences. Note this pre(post)amble itself contains shortcuts
that bypass gtkhtml, gnomecore, or both.

	gconf -> gtk12 ->
	gconf -> oaf -> gnomehier ->
	gconf -> oaf -> gtk12 ->
	gdk-pixbuf -> gtk12 ->
	gnomecanvas -> gdk-pixbuf -> gtk12 ->
	gnomecanvas -> gnomelibs -> scrollkeeper -> gnomehier ->
	gnomevfs -> gconf -> oaf -> gnomehier ->
	gnomevfs -> gconf -> oaf -> gtk12 ->
	gnomevfs -> gnomemime -> gnomehier ->
	libcapplet -> gtk12 ->


Any port that depends on any of ports in the list gets into make loop at
closure calculations.


Finally, let's compare fontconfig's dependencies between 2.1.92 and 2.1.93.

% grep pkgdep /var/db/pkg/fontconfig-2.1.92/+CONTENTS
@pkgdep pkgconfig-0.15.0
@pkgdep freetype2-2.1.3_1
@pkgdep expat-1.95.6_1
% grep pkgdep /var/db/pkg/fontconfig-2.1.93/+CONTENTS
@pkgdep pkgconfig-0.15.0
@pkgdep libiconv-1.8_2
@pkgdep libgnugetopt-1.2
@pkgdep libaudiofile-0.2.3
@pkgdep imlib-1.9.14_1
@pkgdep imake-4.3.0
@pkgdep gnomelibs-1.4.2_1
@pkgdep expat-1.95.6_1
@pkgdep gtkhtml-1.1.8
@pkgdep gnomecore-1.4.2
@pkgdep gnomecontrolcenter-1.4.0.5_1
@pkgdep glib-1.2.10_8
@pkgdep gtk-1.2.10_9
@pkgdep freetype2-2.1.4
@pkgdep gettext-0.11.5_1
@pkgdep fontconfig-2.1.92
@pkgdep esound-0.2.29
@pkgdep XFree86-libraries-4.3.0_1

The fontconfig started to depend on gtkhtml, imlib, gnomecore, and
gnomecontrolcenter on 2.1.93. (Funny, it even depends on XFree86-4-libraries
which depends on fontconfig.)

As shown, all the circles that relate to fontconfig are introduced on 2.1.93.
Again note that {fontconfig} is one of the minimal cutsets.

Now complaints are understood.
2.1.93 is, at least for me, more harmful than the previous.



horio shoichi



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030417.202738.36fbf3aaf09226c2.10.0.3.9>