From: Chad Fraleigh <[email protected]> > > On 7/22/2019 11:14 AM, [email protected] wrote: > >> +static void rm_shmid(AVFormatContext *s) { >> + XCBGrabContext *c = s->priv_data; >> + if(c->shmid != -1) { >> + shmctl(c->shmid, IPC_RMID, 0); >> + c->shmid == -1; > ^^^^^^^^^^^^^^ > Assignment/compare operator mismatch. > > >> + } >> +} >> +
Well, that's embarrassing.
diff --git a/libavdevice/xcbgrab.c b/libavdevice/xcbgrab.c
index b7e689343e..1acf3cdf28 100644
--- a/libavdevice/xcbgrab.c
+++ b/libavdevice/xcbgrab.c
@@ -75,6 +75,7 @@ typedef struct XCBGrabContext {
const char *framerate;
int has_shm;
+ int shmid;
} XCBGrabContext;
#define FOLLOW_CENTER -1
@@ -221,6 +222,14 @@ static int check_shm(xcb_connection_t *conn)
return 0;
}
+static void rm_shmid(AVFormatContext *s) {
+ XCBGrabContext *c = s->priv_data;
+ if(c->shmid != -1) {
+ shmctl(c->shmid, IPC_RMID, 0);
+ c->shmid = -1;
+ }
+}
+
static int allocate_shm(AVFormatContext *s)
{
XCBGrabContext *c = s->priv_data;
@@ -230,7 +239,8 @@ static int allocate_shm(AVFormatContext *s)
if (c->buffer)
return 0;
- id = shmget(IPC_PRIVATE, size, IPC_CREAT | 0777);
+
+ id = shmget(IPC_PRIVATE, size, IPC_CREAT | 0666);
if (id == -1) {
char errbuf[1024];
int err = AVERROR(errno);
@@ -239,15 +249,20 @@ static int allocate_shm(AVFormatContext *s)
size, errbuf);
return err;
}
+
xcb_shm_attach(c->conn, c->segment, id, 0);
data = shmat(id, NULL, 0);
- shmctl(id, IPC_RMID, 0);
- if ((intptr_t)data == -1 || !data)
- return AVERROR(errno);
+
+ if ((intptr_t)data == -1 || !data) {
+ shmctl(id, IPC_RMID, 0);
+ return AVERROR(errno);
+ }
c->buffer = data;
+ c->shmid = id;
return 0;
}
+
static int xcbgrab_frame_shm(AVFormatContext *s, AVPacket *pkt)
{
XCBGrabContext *c = s->priv_data;
@@ -268,6 +283,8 @@ static int xcbgrab_frame_shm(AVFormatContext *s, AVPacket
*pkt)
xcb_flush(c->conn);
+ rm_shmid(s);
+
if (e) {
av_log(s, AV_LOG_ERROR,
"Cannot get the image data "
pgpuJi_hdCDXT.pgp
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
