fontconfig-2.1.93 considered more harmful

BugsGrief at bugsgrief.net BugsGrief at bugsgrief.net
Thu Apr 17 13:27:48 PDT 2003


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



More information about the freebsd-stable mailing list