[RFU][1.3.9-2] pv
Aaron Schneider
notstop2@users.sourceforge.net
Fri Dec 7 15:46:00 GMT 2012
On 07/12/2012 10:58, Corinna Vinschen wrote:
> Again, Cygwin supports SYSV IPC. Please inform the original author that
> the functionality depends on a running cygserver process. If this
> process is not running, the SYSV IPC functions return ENOSYS.
>
> IMHO there's no reason to exit if the msgget function returns ENOSYS.
> The code could simply note the fact and proceed, and only return an
> error if the user tried the -R option.
>
The function has not returned ENOSYS, instead the process has received a
signal, according to gdb's output. This is arguably a bug in Cygwin.
If msgget fails, it should return an error rather than raising a signal.
If it returns an error, pv will handle that.
-------------- next part --------------
$ gdb pv
GNU gdb (GDB) 7.5.50.20120815-cvs (cygwin-special)
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-cygwin".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/bin/pv...Reading symbols from /usr/lib/debug/usr/bin/pv.exe.dbg...done.
done.
(gdb) break main.c:1
Breakpoint 1 at 0x4014b7: file /usr/src/debug/pv-1.4.0-1/src/main/main.c, line 1.
(gdb) s
The program is not being run.
(gdb) run
Starting program: /usr/bin/pv
[New Thread 165608.0x25670]
[New Thread 165608.0x27604]
Breakpoint 1, main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:50
50 return 64;
(gdb) s
36 {
(gdb) s
43 setlocale(LC_ALL, "");
(gdb) s
44 bindtextdomain(PACKAGE, LOCALEDIR);
(gdb) s
45 textdomain(PACKAGE);
(gdb) s
48 opts = opts_parse(argc, argv);
(gdb) s
opts_parse (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/options.c:51
51 struct option long_options[] = {
(gdb) s
49 {
(gdb) s
51 struct option long_options[] = {
(gdb) s
49 {
(gdb) s
51 struct option long_options[] = {
(gdb) s
80 int option_index = 0;
(gdb) s
86 opts = calloc(1, sizeof(*opts));
(gdb) s
87 if (!opts) {
(gdb) s
86 opts = calloc(1, sizeof(*opts));
(gdb) s
87 if (!opts) {
(gdb) s
95 opts->program_name = argv[0];
(gdb) s
98 opts->argv = calloc(argc + 1, sizeof(char *));
(gdb) s
97 opts->argc = 0;
(gdb) s
98 opts->argv = calloc(argc + 1, sizeof(char *));
(gdb) s
99 if (!opts->argv) {
(gdb) s
98 opts->argv = calloc(argc + 1, sizeof(char *));
(gdb) s
99 if (!opts->argv) {
(gdb) s
111 opts->interval = 1;
(gdb) s
244 opts->pidfile = optarg;
(gdb) s
109 numopts = 0;
(gdb) s
111 opts->interval = 1;
(gdb) s
244 opts->pidfile = optarg;
(gdb) s
241 opts->remote = pv_getnum_i(optarg);
(gdb) s
232 opts->buffer_size = pv_getnum_ll(optarg);
(gdb) s
229 opts->rate_limit = pv_getnum_ll(optarg);
(gdb) s
115 c = getopt_long(argc, argv, /* RATS: ignore */
(gdb) s
121 if (c < 0)
(gdb) s
115 c = getopt_long(argc, argv, /* RATS: ignore */
(gdb) s
121 if (c < 0)
(gdb) s
265 } while (c != -1);
(gdb) s
270 if (0 == numopts) {
(gdb) s
271 opts->progress = 1;
(gdb) s
272 opts->timer = 1;
(gdb) s
273 opts->eta = 1;
(gdb) s
274 opts->rate = 1;
(gdb) s
275 opts->bytes = 1;
(gdb) s
281 while (optind < argc) {
(gdb) s
286 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:49
49 if (NULL == opts)
(gdb) s
48 opts = opts_parse(argc, argv);
(gdb) s
49 if (NULL == opts)
(gdb) s
52 if (opts->do_nothing) {
(gdb) s
60 if (opts->remote > 0) {
(gdb) s
69 state = pv_state_alloc(opts->program_name);
(gdb) s
pv_state_alloc (program_name=0x8003b070 "/usr/bin/pv") at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:20
20 state = calloc(1, sizeof(*state));
(gdb) s
21 if (0 == state)
(gdb) s
20 state = calloc(1, sizeof(*state));
(gdb) s
21 if (0 == state)
(gdb) s
24 state->program_name = program_name;
(gdb) s
26 state->pv_crs_shmid = -1;
(gdb) s
27 state->pv_crs_pvcount = 1;
(gdb) s
29 state->pv_crs_lock_fd = -1;
(gdb) s
24 state->program_name = program_name;
(gdb) s
31 state->reparse_display = 1;
(gdb) s
32 state->current_file = _("none");
(gdb) s
35 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:70
70 if (NULL == state) {
(gdb) s
69 state = pv_state_alloc(opts->program_name);
(gdb) s
70 if (NULL == state) {
(gdb) s
80 if (opts->pidfile != NULL) {
(gdb) s
97 if (0 == opts->argc)
(gdb) s
98 opts->argv[opts->argc++] = "-";
(gdb) s
103 pv_state_inputfiles(state, opts->argc,
(gdb) s
pv_state_inputfiles (state=0x8003b6d0, input_file_count=1, input_files=0x80028bc8) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:160
160 {
(gdb) s
161 state->input_file_count = input_file_count;
(gdb) s
162 state->input_files = input_files;
(gdb) s
163 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:109
109 if (0 == opts->size)
(gdb) s
110 opts->size = pv_calc_total_size(state);
(gdb) s
pv_calc_total_size (state=0x8003b6d0) at /usr/src/debug/pv-1.4.0-1/src/pv/file.c:45
45 if (state->input_file_count < 1) {
(gdb) s
52 if (0 == strcmp(state->input_files[i], "-")) {
(gdb) s
45 if (state->input_file_count < 1) {
(gdb) s
52 if (0 == strcmp(state->input_files[i], "-")) {
(gdb) s
53 rc = fstat64(STDIN_FILENO, &sb);
(gdb) s
54 if (rc != 0) {
(gdb) s
78 if (S_ISBLK(sb.st_mode)) {
(gdb) s
99 } else if (S_ISREG(sb.st_mode)) {
(gdb) s
102 total = 0;
(gdb) s
51 for (i = 0; i < state->input_file_count; i++) {
(gdb) s
114 if (total <= 0) {
(gdb) s
115 rc = fstat64(STDOUT_FILENO, &sb);
(gdb) s
116 if ((0 == rc) && S_ISBLK(sb.st_mode)
(gdb) s
139 if (!state->linemode)
(gdb) s
202 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:115
115 if (opts->size < 1)
(gdb) s
110 opts->size = pv_calc_total_size(state);
(gdb) s
115 if (opts->size < 1)
(gdb) s
116 opts->eta = 0;
(gdb) s
122 if ((0 == isatty(STDERR_FILENO))
(gdb) s
130 if ((0 == opts->width) || (0 == opts->height)) {
(gdb) s
134 pv_screensize(&width, &height);
(gdb) s
132 width = 0;
(gdb) s
133 height = 0;
(gdb) s
134 pv_screensize(&width, &height);
(gdb) s
pv_screensize (width=0x28ac1c, height=0x28ac18) at /usr/src/debug/pv-1.4.0-1/src/pv/display.c:28
28 if (isatty(STDERR_FILENO)) {
(gdb) s
29 if (0 == ioctl(STDERR_FILENO, TIOCGWINSZ, &wsz)) {
(gdb) s
30 *width = wsz.ws_col;
(gdb) s
31 *height = wsz.ws_row;
(gdb) s
35 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:135
135 if (0 == opts->width)
(gdb) s
136 opts->width = width;
(gdb) s
137 if (0 == opts->height)
(gdb) s
138 opts->height = height;
(gdb) s
144 if (opts->width < 1)
(gdb) s
146 if (opts->height < 1)
(gdb) s
148 if (opts->width > 999999)
(gdb) s
150 if (opts->height > 999999)
(gdb) s
156 if (opts->interval < 0.1)
(gdb) s
158 if (opts->interval > 600)
(gdb) s
164 pv_state_interval_set(state, opts->interval);
(gdb) s
pv_state_interval_set (state=0x8003b6d0, val=1) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:135
135 state->interval = val;
(gdb) s
136 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:165
165 pv_state_width_set(state, opts->width);
(gdb) s
pv_state_width_set (state=0x8003b6d0, val=175) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:139
139 state->width = val;
(gdb) s
140 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:166
166 pv_state_height_set(state, opts->height);
(gdb) s
pv_state_height_set (state=0x8003b6d0, val=55) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:143
143 state->height = val;
(gdb) s
144 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:167
167 pv_state_no_op_set(state, opts->no_op);
(gdb) s
pv_state_no_op_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:110
110 state->no_op = val;
(gdb) s
111 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:168
168 pv_state_force_set(state, opts->force);
(gdb) s
pv_state_force_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:90
90 state->force = val;
(gdb) s
91 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:169
169 pv_state_cursor_set(state, opts->cursor);
(gdb) s
pv_state_cursor_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:94
94 state->cursor = val;
(gdb) s
95 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:170
170 pv_state_numeric_set(state, opts->numeric);
(gdb) s
pv_state_numeric_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:98
98 state->numeric = val;
(gdb) s
99 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:171
171 pv_state_wait_set(state, opts->wait);
(gdb) s
pv_state_wait_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:102
102 state->wait = val;
(gdb) s
103 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:172
172 pv_state_linemode_set(state, opts->linemode);
(gdb) s
pv_state_linemode_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:106
106 state->linemode = val;
(gdb) s
107 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:173
173 pv_state_skip_errors_set(state, opts->skip_errors);
(gdb) s
pv_state_skip_errors_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:114
114 state->skip_errors = val;
(gdb) s
115 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:174
174 pv_state_stop_at_size_set(state, opts->stop_at_size);
(gdb) s
pv_state_stop_at_size_set (state=0x8003b6d0, val=0 '\000') at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:118
118 state->stop_at_size = val;
(gdb) s
119 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:175
175 pv_state_rate_limit_set(state, opts->rate_limit);
(gdb) s
pv_state_rate_limit_set (state=0x8003b6d0, val=0) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:122
122 state->rate_limit = val;
(gdb) s
123 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:176
176 pv_state_target_buffer_size_set(state, opts->buffer_size);
(gdb) s
pv_state_target_buffer_size_set (state=0x8003b6d0, val=0) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:127
127 state->target_buffer_size = val;
(gdb) s
128 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:177
177 pv_state_size_set(state, opts->size);
(gdb) s
pv_state_size_set (state=0x8003b6d0, val=0) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:131
131 state->size = val;
(gdb) s
132 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:178
178 pv_state_name_set(state, opts->name);
(gdb) s
pv_state_name_set (state=0x8003b6d0, val=0x0) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:147
147 state->name = val;
(gdb) s
148 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:179
179 pv_state_format_string_set(state, opts->format);
(gdb) s
pv_state_format_string_set (state=0x8003b6d0, val=0x0) at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:151
151 state->format_string = val;
(gdb) s
152 };
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:181
181 pv_state_set_format(state, opts->progress, opts->timer, opts->eta,
(gdb) s
pv_state_set_format (state=0x8003b6d0, progress=1 '\001', timer=1 '\001', eta=0 '\000', rate=1 '\001', average_rate=0 '\000', bytes=1 '\001', name=0x0)
at /usr/src/debug/pv-1.4.0-1/src/pv/state.c:67
67 {
(gdb) s
74 state->default_format[0] = 0;
(gdb) s
67 {
(gdb) s
75 PV_ADDFORMAT(name, "%N");
(gdb) s
76 PV_ADDFORMAT(bytes, "%b");
(gdb) s
77 PV_ADDFORMAT(timer, "%t");
(gdb) s
78 PV_ADDFORMAT(rate, "%r");
(gdb) s
79 PV_ADDFORMAT(average_rate, "%a");
(gdb) s
80 PV_ADDFORMAT(progress, "%p");
(gdb) s
81 PV_ADDFORMAT(eta, "%e");
(gdb) s
83 state->name = name;
(gdb) s
84 state->reparse_display = 1;
(gdb) s
83 state->name = name;
(gdb) s
85 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:202
202 memset(&t, 0, sizeof(t));
(gdb) s
203 tcgetattr(STDERR_FILENO, &t);
(gdb) s
204 t_save = t;
(gdb) s
206 tcsetattr(STDERR_FILENO, TCSANOW, &t);
(gdb) s
204 t_save = t;
(gdb) s
206 tcsetattr(STDERR_FILENO, TCSANOW, &t);
(gdb) s
204 t_save = t;
(gdb) s
205 t.c_lflag |= TOSTOP;
(gdb) s
204 t_save = t;
(gdb) s
206 tcsetattr(STDERR_FILENO, TCSANOW, &t);
(gdb) s
208 pv_sig_init(state);
(gdb) s
pv_sig_init (state=0x8003b6d0) at /usr/src/debug/pv-1.4.0-1/src/pv/signal.c:135
135 {
(gdb) s
151 sigemptyset(&(sa.sa_mask));
(gdb) s
150 sa.sa_handler = SIG_IGN;
(gdb) s
151 sigemptyset(&(sa.sa_mask));
(gdb) s
140 pv_sig_state->pv_sig_old_stderr = -1;
(gdb) s
141 pv_sig_state->pv_sig_tstp_time.tv_sec = 0;
(gdb) s
142 pv_sig_state->pv_sig_tstp_time.tv_usec = 0;
(gdb) s
143 pv_sig_state->pv_sig_toffset.tv_sec = 0;
(gdb) s
144 pv_sig_state->pv_sig_toffset.tv_usec = 0;
(gdb) s
138 pv_sig_state = state;
(gdb) s
151 sigemptyset(&(sa.sa_mask));
(gdb) s
153 sigaction(SIGPIPE, &sa, &(pv_sig_state->pv_sig_old_sigpipe));
(gdb) s
152 sa.sa_flags = 0;
(gdb) s
153 sigaction(SIGPIPE, &sa, &(pv_sig_state->pv_sig_old_sigpipe));
(gdb) s
160 sigemptyset(&(sa.sa_mask));
(gdb) s
159 sa.sa_handler = pv_sig_ttou;
(gdb) s
160 sigemptyset(&(sa.sa_mask));
(gdb) s
162 sigaction(SIGTTOU, &sa, &(pv_sig_state->pv_sig_old_sigttou));
(gdb) s
161 sa.sa_flags = 0;
(gdb) s
162 sigaction(SIGTTOU, &sa, &(pv_sig_state->pv_sig_old_sigttou));
(gdb) s
169 sigemptyset(&(sa.sa_mask));
(gdb) s
168 sa.sa_handler = pv_sig_tstp;
(gdb) s
169 sigemptyset(&(sa.sa_mask));
(gdb) s
171 sigaction(SIGTSTP, &sa, &(pv_sig_state->pv_sig_old_sigtstp));
(gdb) s
170 sa.sa_flags = 0;
(gdb) s
171 sigaction(SIGTSTP, &sa, &(pv_sig_state->pv_sig_old_sigtstp));
(gdb) s
179 sigemptyset(&(sa.sa_mask));
(gdb) s
178 sa.sa_handler = pv_sig_cont;
(gdb) s
179 sigemptyset(&(sa.sa_mask));
(gdb) s
181 sigaction(SIGCONT, &sa, &(pv_sig_state->pv_sig_old_sigcont));
(gdb) s
180 sa.sa_flags = 0;
(gdb) s
181 sigaction(SIGCONT, &sa, &(pv_sig_state->pv_sig_old_sigcont));
(gdb) s
188 sigemptyset(&(sa.sa_mask));
(gdb) s
187 sa.sa_handler = pv_sig_winch;
(gdb) s
188 sigemptyset(&(sa.sa_mask));
(gdb) s
190 sigaction(SIGWINCH, &sa, &(pv_sig_state->pv_sig_old_sigwinch));
(gdb) s
189 sa.sa_flags = 0;
(gdb) s
190 sigaction(SIGWINCH, &sa, &(pv_sig_state->pv_sig_old_sigwinch));
(gdb) s
197 sigemptyset(&(sa.sa_mask));
(gdb) s
196 sa.sa_handler = pv_sig_term;
(gdb) s
197 sigemptyset(&(sa.sa_mask));
(gdb) s
199 sigaction(SIGINT, &sa, &(pv_sig_state->pv_sig_old_sigint));
(gdb) s
198 sa.sa_flags = 0;
(gdb) s
199 sigaction(SIGINT, &sa, &(pv_sig_state->pv_sig_old_sigint));
(gdb) s
202 sigemptyset(&(sa.sa_mask));
(gdb) s
201 sa.sa_handler = pv_sig_term;
(gdb) s
202 sigemptyset(&(sa.sa_mask));
(gdb) s
204 sigaction(SIGHUP, &sa, &(pv_sig_state->pv_sig_old_sighup));
(gdb) s
203 sa.sa_flags = 0;
(gdb) s
204 sigaction(SIGHUP, &sa, &(pv_sig_state->pv_sig_old_sighup));
(gdb) s
207 sigemptyset(&(sa.sa_mask));
(gdb) s
206 sa.sa_handler = pv_sig_term;
(gdb) s
207 sigemptyset(&(sa.sa_mask));
(gdb) s
209 sigaction(SIGTERM, &sa, &(pv_sig_state->pv_sig_old_sigterm));
(gdb) s
208 sa.sa_flags = 0;
(gdb) s
209 sigaction(SIGTERM, &sa, &(pv_sig_state->pv_sig_old_sigterm));
(gdb) s
210 }
(gdb) s
main (argc=1, argv=0x28ac60) at /usr/src/debug/pv-1.4.0-1/src/main/main.c:210
210 pv_remote_init();
(gdb) s
pv_remote_init () at /usr/src/debug/pv-1.4.0-1/src/main/remote.c:280
280 remote__msgid = remote__msgget();
(gdb) s
remote__msgget () at /usr/src/debug/pv-1.4.0-1/src/main/remote.c:80
80 return msgget(remote__genkey(), IPC_CREAT | 0600);
(gdb) s
remote__genkey () at /usr/src/debug/pv-1.4.0-1/src/main/remote.c:64
64 uid = geteuid();
(gdb) s
68 key = ftok("/tmp", 'P') | uid;
(gdb) s
64 uid = geteuid();
(gdb) s
68 key = ftok("/tmp", 'P') | uid;
(gdb) s
remote__msgget () at /usr/src/debug/pv-1.4.0-1/src/main/remote.c:80
80 return msgget(remote__genkey(), IPC_CREAT | 0600);
(gdb) s
remote__genkey () at /usr/src/debug/pv-1.4.0-1/src/main/remote.c:68
68 key = ftok("/tmp", 'P') | uid;
(gdb) s
remote__msgget () at /usr/src/debug/pv-1.4.0-1/src/main/remote.c:80
80 return msgget(remote__genkey(), IPC_CREAT | 0600);
(gdb) s
Program received signal SIGSYS, Bad system call.
0x00000000 in ?? ()
(gdb) s
Cannot find bounds of current function
(gdb)
More information about the Cygwin-apps
mailing list