[
https://issues.apache.org/jira/browse/GUACAMOLE-1115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17656989#comment-17656989
]
Magnus Lübeck commented on GUACAMOLE-1115:
------------------------------------------
This issue is closed as "Fixed" with the fix version 1.5.0, but there is no
reference to how it was solved. The last comment states that we need to modify
the way print jobs are closed. It does not really seem to be resolved yet. The
bug is present in at least 1.3.0 and 1.4.0, where I can reproduce it reliably.
Is there a fix available already, or is there a bug ticket floating around that
could be referenced here?
> 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.10#820010)