fix inappropriate locking sequenece

changes/71/8771/1
Richard Fuchs 12 years ago
parent b449b9f6e1
commit 189d660da1

@ -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