diff options
author | Ryo Nakamura <upa@haeena.net> | 2022-10-30 12:27:58 +0000 |
---|---|---|
committer | Ryo Nakamura <upa@haeena.net> | 2022-10-30 12:27:58 +0000 |
commit | e997d692c2812b8e4cbd77865c4ca8112d036d1c (patch) | |
tree | 8aaa2b243a61ae661cf69c9c5116bac5d9f4bbed /src | |
parent | 453e8f27ced864cb9b4d2a532f017fcc6a86028a (diff) |
set nr_threads to # of chunks if # of chunks is small
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 15 | ||||
-rw-r--r-- | src/pprint.c | 5 | ||||
-rw-r--r-- | src/pprint.h | 6 |
3 files changed, 20 insertions, 6 deletions
@@ -55,7 +55,7 @@ struct mscp_thread { void *mscp_copy_thread(void *arg); void *mscp_monitor_thread(void *arg); -static pthread_t mtid; +pthread_t mtid; struct mscp_thread *threads; int nr_threads; @@ -69,6 +69,14 @@ void stop_copy_threads(int sig) } } +int list_count(struct list_head *head) +{ + int n = 0; + struct list_head *p; + + list_for_each(p, head) n++; + return n; +} void usage(bool print_help) { printf("mscp v" VERSION ": copy files over multiple ssh connections\n" @@ -318,6 +326,11 @@ int main(int argc, char **argv) } /* prepare thread instances */ + if ((n = list_count(&m.chunk_list)) < nr_threads) { + pprint3("we have only %d chunk(s). set nr_conns to %d\n", n, n); + nr_threads = n; + } + threads = calloc(nr_threads, sizeof(struct mscp_thread)); memset(threads, 0, nr_threads * sizeof(struct mscp_thread)); for (n = 0; n < nr_threads; n++) { diff --git a/src/pprint.c b/src/pprint.c index 64f8a21..9032489 100644 --- a/src/pprint.c +++ b/src/pprint.c @@ -3,11 +3,6 @@ #include <pthread.h> static int pprint_level = 1; -/* level 1: print progress bar only. - * level 2: print copy start/done messages. - * level 3: print ssh connection establishment/disconnection. - * level 4: print chunk information. - */ static pthread_mutex_t pprint_lock = PTHREAD_MUTEX_INITIALIZER; diff --git a/src/pprint.h b/src/pprint.h index 7fa303e..de1f1f4 100644 --- a/src/pprint.h +++ b/src/pprint.h @@ -3,6 +3,11 @@ /* progress print functions */ +/* level 1: print progress bar only. + * level 2: print copy start/done messages. + * level 3: print ssh connection establishment/disconnection. + * level 4: print chunk information. + */ void pprint_set_level(int level); void pprint(int level, const char *fmt, ...); @@ -11,4 +16,5 @@ void pprint(int level, const char *fmt, ...); #define pprint3(fmt, ...) pprint(3, "\r\033[K" fmt, ##__VA_ARGS__) #define pprint4(fmt, ...) pprint(4, "\r\033[K" fmt, ##__VA_ARGS__) + #endif /* _PPRRINT_H_ */ |