[Clam-devel] Clam in the long run
Pau Arumi
parumi at iua.upf.edu
Tue Sep 4 03:44:16 PDT 2007
En/na Moritz FISER ha escrit:
>> En/na Moritz FISER ha escrit:
>>> Dear Clam Developers,
>>>
>>> I'm currently working on my first app. using the Clam Network. It is
>>> supposed to set up a Network at the start and then run for a looong
>>> time.
>>
>> Hi Moritz, and welcome to develop with clam.
>>
>> First note that I've manually accepted this mail as a list admin
>> since you where not subscribed. So please do it.
>
> Hi Pau, thanks for your reply, I noticed I subcribed with another alias
> to my mail address, should be sorted now.
>
>>> So far it is working quite well, but after an uptime of a day it's
>>> running into troubles. Since I implemented the processings and
>>> networkplayer myself I'm not sure if I perhaps made a mistake
>>> concerning the usage of ports there.
>>
>> Did you implemented a new networkplayer? For a new audio backend
>> maybe? A patch would be helpful (both player and processings).
>
> The player is a modified version of the PANetworkPlayer, but with an
> additional buffer and multithreading, to avoid dropouts at all costs and
> being able to save unprocessed data in case of a crash. It's pretty
> specific to my problem and just implemented to record for now.
>
>>> Anyway, I've analyzed the problem (which takes a while as you can
>>> imagine :P) and tracked it down to the Consume() method in
>>> ReadingRegion.hxx, where mPos gets assigned Pos()+Hop(), which leads
>>> to an overflow of mPos in the long term of course, since it's called
>>> by the Do() of my processings every time.
>>> Before looking too far into it, I decided to ask here for some
>>> further help, since it could just be a usage error on my side. Hope I
>>> could make my problem clear,
>>
>> It's difficult to judge with so few elements. I suggest some
>> actions:
>> - run (with a small input) with valgrind to detect mem errors or
>> leaks.
>> - try to reproduce it only with clam processings and network
>> player (instead of yours).
>> - send a patch so we can reproduce it here.
>
> Ok, I checked the problem again and it seems my suspicion about it's
> origin got confirmed. Here's what it's about:
>
> I'm instantiating a Clam Network, add my processings and connect them by
> ports. After starting the Player, the Do() methods get called, and in a
> processing's Do() it calls a Consume() on it's port. So far everything
> works fine until 13.52 hours have elapsed, which corresponds to an
> overflow of a 4byte int at a samplerate of 44100 Hz. The according
> integer can be found in Region.hxx - long mPos (4 bytes on my machine).
>
> After successive calls of Consume(), mPos produces an overflow and
> causes problems.
That's right we have an ever increasing integer for the sample
position! We thought that a long int would be enough for all uses.
And you proved that wrong.
> My immediate fix of course was to change the datatype from long to long
> long, which should work fine for me for the next 6.7 Mio. years at 44100
> Hz.
It's a relieve to learn that you don't plan to run your network for
longer than that :)
Please send the patch and I'll commit it.
Pau
More information about the clam-devel
mailing list