Browse Source

fix inappropriate locking sequenece

pull/11/head
Richard Fuchs 12 years ago
parent
commit
69dec02648
1 changed files with 10 additions and 5 deletions
  1. +10
    -5
      daemon/call.c

+ 10
- 5
daemon/call.c View File

@ -527,7 +527,7 @@ void callmaster_msg_mh_src(struct callmaster *cm, struct msghdr *mh) {
/* called lock-free */
static int stream_packet(struct stream_fd *sfd, str *s, struct sockaddr_in6 *fsin) {
struct packet_stream *stream = sfd->stream,
struct packet_stream *stream,
*sink = NULL,
*in_srtp, *out_srtp;
struct call_media *media;
@ -544,16 +544,20 @@ static int stream_packet(struct stream_fd *sfd, str *s, struct sockaddr_in6 *fsi
struct endpoint endpoint;
rewrite_func rwf_in, rwf_out;
if (!stream)
return 0;
media = stream->media;
call = stream->call;
call = sfd->call;
cm = call->callmaster;
smart_ntop_port(addr, fsin, sizeof(addr));
rwlock_lock_r(&call->master_lock);
stream = sfd->stream;
if (!stream)
goto unlock_out;
mutex_lock(&stream->in_lock);
media = stream->media;
if (!stream->sfd)
goto done;
@ -764,6 +768,7 @@ done:
stream_unkernelize(stream->rtp_sink);
stream_unkernelize(stream->rtcp_sink);
}
unlock_out:
rwlock_unlock_r(&call->master_lock);
return ret;


Loading…
Cancel
Save