You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@guacamole.apache.org by "Nick Couchman (Jira)" <ji...@apache.org> on 2020/06/30 12:19:00 UTC

[jira] [Reopened] (GUACAMOLE-1115) Printing problem that locks up the entire session and produces the disconnect

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

Nick Couchman reopened GUACAMOLE-1115:
--------------------------------------

> Printing problem that locks up the entire session and produces the disconnect
> -----------------------------------------------------------------------------
>
>                 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
>            Priority: Minor
>             Fix For: 1.2.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.3.4#803005)