ccrtp-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Ccrtp-devel] 2 problem in rtp.h


From: David Sugar
Subject: Re: [Ccrtp-devel] 2 problem in rtp.h
Date: Thu, 11 Mar 2004 21:13:57 -0500
User-agent: KMail/1.5.3

Hmm...I think Federico will look at this more closely.  However, the current 
release of ccrtp is 1.1.0, not 1.0.2.  It looks like the username question is 
valid for 1.1.0 as well, however, and so I assume the other issue is also.

I was thinking it would soon be a good time to do a new release since we were 
getting ready to do a 1.1.1 common c++ release shortly.

On a related note, should we continue using std::string in ccrtp or should we 
now use the new Common C++ "String" class?

On Friday 12 March 2004 07:20 am, Guillaume Glodas wrote:
> Hi,
>
>
> we've found a string initialisation problem in the source file
> ccrtp-1.0.2/src/source.cpp
>
> 81,83c81,90
>        if ( !strcmp(user,"") )
>                user = Process::getEnv("USER");
>        username = user;
>
> when user is NULL, username which is a string, is wrongly initialised.
>
> this piece of code seems to fix this bug :
>        if (user) {
>                if ( !strcmp(user,"") )
>                        user = Process::getEnv("USER");
>        if (user)
>                username = user;
>        else
>                username="";
>  }
>  else
>        username ="";
> .
>
> We've found a dead lock problem in the header file
> ccrtp-1.0.2_local/src/ccrtp/rtp.h
>
>     run()
>         {
>                 microtimeout_t timeout = 0;
>                 while ( ServiceQueue::isActive() ) {
>                         if ( !timeout ){
>                                 timeout = getSchedulingTimeout();
>                         }
>                         setCancel(cancelDeferred);
>                         controlReceptionService();
>                         controlTransmissionService();
>                         setCancel(cancelImmediate);
>                         microtimeout_t maxWait =
>
> timeval2microtimeout(getRTCPCheckInterval());
>                         // make sure the scheduling timeout is
>                         // <= the check interval for RTCP
>                         // packets
>                         timeout = (timeout > maxWait)? maxWait :
> timeout;
>                         if ( !timeout ) {
>                                 setCancel(cancelDeferred);
>                                 size_t r = dispatchDataPacket();
>                                 setCancel(cancelImmediate);
>                                 if ( r < 0 )
>                                         timeout = timeout;
>                                 timerTick();
>                         } else {
>                                 if ( isPendingData(timeout/1000) ) {
>                                         setCancel(cancelDeferred);
>                                         size_t r = takeInDataPacket();
>                                         setCancel(cancelImmediate);
>                                         if ( r < 0 )
>                                                 return;
>                                 }
>                                 timeout = 0;
>                         }
>                 }
>                 dispatchBYE("GNU ccRTP stack finishing.");
>                 sleep(~0);
>         }
>
> if timeout < 100 timeout/1000 = 0
> isPendingData(timeout/1000) == isPendingData(0)
> if there no incoming data, isPendingData waits undefinitely.
>
> This piece of code seems to solve the problem :
>     run()
>         {
>                 microtimeout_t timeout = 0;
>                 while ( ServiceQueue::isActive() ) {
>                         if ( !(timeout/1000) ){
>                                 timeout = getSchedulingTimeout();
>                         }
>                         setCancel(cancelDeferred);
>                         controlReceptionService();
>                         controlTransmissionService();
>                         setCancel(cancelImmediate);
>                         microtimeout_t maxWait =
>
> timeval2microtimeout(getRTCPCheckInterval());
>                         // make sure the scheduling timeout is
>                         // <= the check interval for RTCP
>                         // packets
>                         timeout = (timeout > maxWait)? maxWait :
> timeout;
>                         if ( !(timeout/1000) ) {
>                                 setCancel(cancelDeferred);
>                                 size_t r = dispatchDataPacket();
>                                 setCancel(cancelImmediate);
>                                 if ( r < 0 )
>                                         timeout = timeout;
>                                 timerTick();
>                         } else {
>                                 if ( isPendingData(timeout/1000) ) {
>                                         setCancel(cancelDeferred);
>                                         size_t r = takeInDataPacket();
>                                         setCancel(cancelImmediate);
>                                         if ( r < 0 )
>                                                 return;
>                                 }
>                                 timeout = 0;
>                         }
>                 }
>                 dispatchBYE("GNU ccRTP stack finishing.");
>                 sleep(~0);
>         }
>
> regards,
>
> Guillaume Glodas
>
>
>
> _______________________________________________
> Ccrtp-devel mailing list
> address@hidden
> http://mail.gnu.org/mailman/listinfo/ccrtp-devel





reply via email to

[Prev in Thread] Current Thread [Next in Thread]