@@ -191,6 +191,9 @@ static bool sublatency = false;
191191/* Use writer loans (only for memcpy-able types) */
192192static bool use_writer_loan = false;
193193
194+ /* Stop when no peers remain */
195+ static bool stop_when_lonely = false;
196+
194197/* Event queue for processing discovery events (data available on
195198 DCPSParticipant, subscription & publication matched)
196199 asynchronously to avoid deadlocking on creating a reader from
@@ -1919,6 +1922,7 @@ OPTIONS:\n\
19191922 from -Qmaxwait:DUR because that doesn't delay starting\n\
19201923 and doesn't terminate the process before doing\n\
19211924 anything.)\n\
1925+ -0 stop when no peers remain\n\
19221926 -1 print \"sub\" stats every second, even when there is\n\
19231927 data\n\
19241928 -X output extended statistics\n\
@@ -2263,11 +2267,12 @@ int main (int argc, char *argv[])
22632267
22642268 argv0 = argv [0 ];
22652269
2266- while ((opt = getopt (argc , argv , "1cd :D:i:n:k:ulLK:T:Q:R:Xh" )) != EOF )
2270+ while ((opt = getopt (argc , argv , "01cd :D:i:n:k:ulLK:T:Q:R:Xh" )) != EOF )
22672271 {
22682272 int pos ;
22692273 switch (opt )
22702274 {
2275+ case '0' : stop_when_lonely = true; break ;
22712276 case '1' : substat_every_second = true; break ;
22722277 case 'c' : collect_stats = true; break ;
22732278 case 'd' : {
@@ -2729,6 +2734,11 @@ int main (int argc, char *argv[])
27292734 {
27302735 twakeup = pp -> tdeadline ;
27312736 }
2737+ if (stop_when_lonely && ddsrt_avl_is_singleton (& ppants ) && matchcount > 0 )
2738+ {
2739+ // last peer left
2740+ ddsrt_atomic_st32 (& termflag , 1 );
2741+ }
27322742 ddsrt_mutex_unlock (& disc_lock );
27332743 }
27342744
0 commit comments