Freenet: using tin for FMS

I actually had to switch back to Thunderbird to read FMS, because tin has a bug or something that prevents communicating with the FMS server.

EDIT: no it doesn’t. This was an issue with FMS. It’s fixed now. Get a newer version.

Anyway, someone made a post to group fms yeasterday, detailing how to use tin with FMS. Here it is, almost entirely. I only removed some private data.

This is to report on using tin as a news client, and
also on the fact that FMS can’t handle many pipelined
GROUP commands.


% uname -a
FreeBSD [removed] 7.0-STABLE
FreeBSD 7.0-STABLE #5: Sun Aug 10 [removed] 2008
[removed]:/usr/obj/usr/src/sys/[removed] i386

% tin -V
Reading config file…
Version: tin 1.9.3 release 20080506 (“Dalintober”) Aug 30 2008 16:27:33

FMS version 0.3.18

When tin reads the list of active articles from the NNTP
server, it sends GROUP commands, all at once – “pipelined”.
Like this:

read_newsrc_active_file() GROUP anarchism
>>> GROUP anarchism [DEBUG: put_server]
read_newsrc_active_file() GROUP de.test
>>> GROUP de.test [DEBUG: put_server]
<<< 211 5 9 324 anarchism
<<< 211 4 215 328 de.test

This breaks FMS when more than two groups are subscribed to.
(Yes, I actually did check 2, 3, 4, 5 groups – "more than two"
seems to be the right definition.)

What happens is that tin sends, say, 5 GROUP messages, FMS
receives and properly handles two of them, and the rest get
choked up somewhere. NNTPConnection::run has a do-while cycle,
this cycle is executed iteration after iteration until
the news client is disconnected.

After that, FMS "receives" all the "missing" GROUP messages.

diff file that I used to trace where all this was taking place:

[CHK link removed]

P.S. It might be related to the sockets, etc.


A temporary solution for anyone who wants to use tin is
disabling message pipelining.

Doing it in 1.9.3 (unstable):

1) add ‘#define DISABLE_PIPELINING’ in include/autoconf.h,
there is no ./configure option yet.
2) grep for PIPELINE_LIMIT, seems that a recent addition to
mail.c doesn’t check if DISABLE_PIPELINING is enabled. So,
either remove PIPELINE_LIMIT or surround it with
‘#ifdef DISABLE_PIPELINING’ and ‘#endif’.
3) make build, don’t make distclean, since it will erase
the modified include/autoconf.h


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: