|
1 http://bugs.proftpd.org/show_bug.cgi?id=4162 |
|
2 |
|
3 --- a/modules/mod_xfer.c 2015-02-03 20:54:22.857151750 -0800 |
|
4 +++ b/modules/mod_xfer.c 2015-02-03 21:10:36.020000070 -0800 |
|
5 @@ -31,6 +31,9 @@ |
|
6 |
|
7 #include "conf.h" |
|
8 #include "privs.h" |
|
9 +#ifdef _SOLARIS_DTRACE |
|
10 +#include "ftp_provider_impl.h" |
|
11 +#endif |
|
12 |
|
13 #ifdef HAVE_SYS_SENDFILE_H |
|
14 # include <sys/sendfile.h> |
|
15 @@ -1784,7 +1787,24 @@ |
|
16 * be doing short writes, and we ideally should be more resilient/graceful |
|
17 * in the face of such things. |
|
18 */ |
|
19 +#ifdef _SOLARIS_DTRACE |
|
20 + if (ftp_transfer_start_enabled()) { |
|
21 + ftpproto_t proto; |
|
22 + FTP_TRANSFER_PROTO(&proto, stor_fh, 0); |
|
23 + ftp_transfer_start(&proto); |
|
24 + } |
|
25 +#endif |
|
26 + |
|
27 res = pr_fsio_write(stor_fh, lbuf, len); |
|
28 + |
|
29 +#ifdef _SOLARIS_DTRACE |
|
30 + if (ftp_transfer_done_enabled() && res == len) { |
|
31 + ftpproto_t proto; |
|
32 + FTP_TRANSFER_PROTO(&proto, stor_fh, res); |
|
33 + ftp_transfer_done(&proto); |
|
34 + } |
|
35 +#endif |
|
36 + |
|
37 if (res != len) { |
|
38 int xerrno = EIO; |
|
39 cmd->error_code = errno; |
|
40 @@ -2203,7 +2223,24 @@ |
|
41 if (XFER_ABORTED) |
|
42 break; |
|
43 |
|
44 +#ifdef _SOLARIS_DTRACE |
|
45 + if (ftp_transfer_start_enabled()) { |
|
46 + ftpproto_t proto; |
|
47 + FTP_TRANSFER_PROTO(&proto, retr_fh, 0); |
|
48 + ftp_transfer_start(&proto); |
|
49 + } |
|
50 +#endif |
|
51 + |
|
52 len = transmit_data(nbytes_sent, &curr_pos, lbuf, bufsz); |
|
53 + |
|
54 +#ifdef _SOLARIS_DTRACE |
|
55 + if (ftp_transfer_done_enabled() && len > 0) { |
|
56 + ftpproto_t proto; |
|
57 + FTP_TRANSFER_PROTO(&proto, retr_fh, len); |
|
58 + ftp_transfer_done(&proto); |
|
59 + } |
|
60 +#endif |
|
61 + |
|
62 if (len == 0) |
|
63 break; |
|
64 |
|
65 |
|
66 |