You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@guacamole.apache.org by "Mike Jumper (Jira)" <ji...@apache.org> on 2022/03/17 19:24:00 UTC

[jira] [Closed] (GUACAMOLE-1115) RDP print process may hang

     [ https://issues.apache.org/jira/browse/GUACAMOLE-1115?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mike Jumper closed GUACAMOLE-1115.
----------------------------------
    Fix Version/s: 1.5.0
       Resolution: Fixed

> RDP print process may hang
> --------------------------
>
>                 Key: GUACAMOLE-1115
>                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-1115
>             Project: Guacamole
>          Issue Type: Bug
>          Components: guacamole-server
>    Affects Versions: 1.1.0
>            Reporter: Jimmy
>            Assignee: Mike Jumper
>            Priority: Minor
>             Fix For: 1.5.0
>
>
> I found the printing problem that locks up the entire session and produces the disconnect.
> When connecting the Windows 2010 and printing the document in Microsoft Word, I encountered this problem.
> This problem isn't always produced and it's sometimes produced.
>  
> So, I have analyzed the printing part of the guacamole server project.
> I have found the following issue:
> If *guac_rdp_print_job_set_state()* function is called after *guac_rdp_print_job_wait_for_ack()* call, this produces the lock of the entire session.
>  
> {code:java}
> static void guac_rdp_print_job_set_state(guac_rdp_print_job* job,
>         guac_rdp_print_job_state state) {
>     pthread_mutex_lock(&(job->state_lock));
>     /* Update stream state, signalling modification */
>     job->state = state;
>     pthread_cond_signal(&(job->state_modified));
>     pthread_mutex_unlock(&(job->state_lock));
> }
> {code}
>   
> {code:java}
> static int guac_rdp_print_job_wait_for_ack(guac_rdp_print_job* job) {
>     /* Wait for ack if stream open and not yet received */
>     pthread_mutex_lock(&(job->state_lock));
>     if (job->state == GUAC_RDP_PRINT_JOB_WAITING_FOR_ACK)
>         pthread_cond_wait(&job->state_modified, &job->state_lock);
>     /* Reset state if ack received */
>     int got_ack = (job->state == GUAC_RDP_PRINT_JOB_ACK_RECEIVED);
>     if (got_ack)
>         job->state = GUAC_RDP_PRINT_JOB_WAITING_FOR_ACK;
>     /* Return whether ack was successfully received */
>     pthread_mutex_unlock(&(job->state_lock));
>     return got_ack;
> }
> {code}
>   
> I think that this issue can produce a printing problem and a lock of the entire session.
> Please let me know whether my thought is correct.
>  
> Thanks.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)