From 74f7d52d9503c7e0ee59c2eeb02ae121edfb1669 Mon Sep 17 00:00:00 2001 From: curt Date: Tue, 12 Feb 2002 15:21:14 +0000 Subject: [PATCH] Fixed a problem that could lead to a 'near infinite' loop if bogus input values are provided. --- simgear/sky/cloud.cxx | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/simgear/sky/cloud.cxx b/simgear/sky/cloud.cxx index 8a69e315..47be6350 100644 --- a/simgear/sky/cloud.cxx +++ b/simgear/sky/cloud.cxx @@ -204,12 +204,29 @@ bool SGCloudLayer::reposition( sgVec3 p, sgVec3 up, double lon, double lat, base = tl->get( 0 ); base[0] += xoff; - while ( base[0] > 1.0 ) { base[0] -= 1.0; } - while ( base[0] < 0.0 ) { base[0] += 1.0; } + + // the while loops can lead to *long* pauses if base[0] comes + // with a bogus value. + // while ( base[0] > 1.0 ) { base[0] -= 1.0; } + // while ( base[0] < 0.0 ) { base[0] += 1.0; } + if ( base[0] > -10.0 && base[0] < 10.0 ) { + base[0] -= (int)base[0]; + } else { + base[0] = 0.0; + cout << "Error: base = " << base[0] << "," << base[1] << endl; + } base[1] += yoff; - while ( base[1] > 1.0 ) { base[1] -= 1.0; } - while ( base[1] < 0.0 ) { base[1] += 1.0; } + // the while loops can lead to *long* pauses if base[0] comes + // with a bogus value. + // while ( base[1] > 1.0 ) { base[1] -= 1.0; } + // while ( base[1] < 0.0 ) { base[1] += 1.0; } + if ( base[1] > -10.0 && base[1] < 10.0 ) { + base[1] -= (int)base[1]; + } else { + base[1] = 0.0; + cout << "Error: base = " << base[0] << "," << base[1] << endl; + } // cout << "base = " << base[0] << "," << base[1] << endl; -- 2.39.2