astrand / xclip

Command line interface to the X11 clipboard
GNU General Public License v2.0
1.04k stars 75 forks source link

Fix -loops failure with large-data-transfers #60

Closed hwangcc23 closed 5 years ago

hwangcc23 commented 5 years ago

The -loops option is broken after merging the pull-request #57 (https://github.com/astrand/xclip/pull/57).

Here is a sample transcript to reproduce the problem. hwangcc23-BU401LG:~$ dd 'if=/dev/zero' 'bs=2000' 'count=1000' | tr '\000' 'a' | xclip -i -quiet -l 1

Expect: xclip should exist right after any requestor (ex: xclip -o) retrieved data. What I saw: xclip didn't exist.

Break out the while(1) loop once there is one SelectionRequest completed such that dloop can be decreased by one and compared to sleep for fixing the problem.

hwangcc23 commented 5 years ago

Fix #59

mckellyln commented 5 years ago

Hi. This works, but I think we should not remove the other check, as in:

        if (finished) {
            del_requestor(requestor);
                break;
        }

        if (!requestors) {
            break;
        }

Maybe tho it doesn't matter. I originally had this fix:

            if (sloop > 0 && finished)
                break;

        if (finished) {
            del_requestor(requestor);
        }

        if (!requestors) {
            break;
        }
hwangcc23 commented 5 years ago

I think it it better to have the outter loop handle sloop/dloop and the inner loop handle SelectionRequest. :)

hwangcc23 commented 5 years ago

@astrand The patch is tested by @mckellyln. Could you review the code and merge it? Thanks.