[Mplayer-dev-eng] patch refused

Arpi arpi at thot.banki.hu
Thu Jul 19 20:55:33 CEST 2001


Hi,

Please do not change indenting of the code!!!
I've reversed this commit.

Modify only lines you need, and leave the others alone.

> Update of /cvsroot/mplayer/main/linux
> In directory mplayer:/var/tmp.root/cvs-serv27987/linux
> 
> Modified Files:
> 	shmem.c 
> Log Message:
> Solaris 2.6 and older do not support MAP_ANON,  just fail the mmap MAP_ANON
> attempt on such a system.  The code tries mmap with /dev/zero and MIT-shm next.
> 
> 
> Index: shmem.c
> ===================================================================
> RCS file: /cvsroot/mplayer/main/linux/shmem.c,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -u -r1.2 -r1.3
> --- shmem.c	18 Apr 2001 01:25:09 -0000	1.2
> +++ shmem.c	19 Jul 2001 18:49:13 -0000	1.3
> @@ -33,51 +33,57 @@
>  
>  static int shmem_type=0;
>  
> -void* shmem_alloc(int size){
> -void* p;
> -int devzero;
> -while(1){
> -  switch(shmem_type){
> -  case 0:  // ========= MAP_ANON|MAP_SHARED ==========
> -    p=mmap(0,size,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0);
> -    if(p==MAP_FAILED) break; // failed
> -//    printf("shmem: %d bytes allocated using mmap anon (%X)\n",size,p);
> -    return p;
> -  case 1:  // ========= MAP_SHARED + /dev/zero ==========
> -	  if ((devzero = open("/dev/zero", O_RDWR, 0)) == -1) break;
> -    p=mmap(0,size,PROT_READ|PROT_WRITE,MAP_SHARED,devzero,0);
> -    if(p==MAP_FAILED) break; // failed
> -//    printf("shmem: %d bytes allocated using mmap /dev/zero (%X)\n",size,p);
> -    return p;
> -  case 2: { // ========= shmget() ==========
> -    struct shmid_ds shmemds;
> -    int shmemid;
> -    if ((shmemid = shmget(IPC_PRIVATE, size, IPC_CREAT | 0600)) == -1) break;
> -    if ((int)(p = shmat(shmemid, 0, 0)) == -1){
> -      perror ("shmat()");
> -      shmctl (shmemid, IPC_RMID, &shmemds);
> +void* shmem_alloc(int size) {
> +  void* p;
> +  static int devzero = -1;
> +  while(1) {
> +    switch(shmem_type) {
> +    case 0:
> +#ifdef	MAP_ANON
> +      // ========= MAP_ANON|MAP_SHARED ==========
> +      p=mmap(0,size,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0);
> +      if(p==MAP_FAILED) break; // failed
> +      //printf("shmem: %d bytes allocated using mmap anon (%X)\n",size,p);
> +      return p;
> +#else
> +      //system does not support MAP_ANON at all (e.g. solaris 2.5.1/2.6), just fail
>        break;
> +#endif
> +    case 1:  // ========= MAP_SHARED + /dev/zero ==========
> +      if (devzero == -1 && (devzero = open("/dev/zero", O_RDWR, 0)) == -1) break;
> +      p=mmap(0,size,PROT_READ|PROT_WRITE,MAP_SHARED,devzero,0);
> +      if(p==MAP_FAILED) break; // failed
> +      //printf("shmem: %d bytes allocated using mmap /dev/zero (%X)\n",size,p);
> +      return p;
> +    case 2: { // ========= shmget() ==========
> +      struct shmid_ds shmemds;
> +      int shmemid;
> +      if ((shmemid = shmget(IPC_PRIVATE, size, IPC_CREAT | 0600)) == -1) break;
> +      if ((int)(p = shmat(shmemid, 0, 0)) == -1) {
> +	perror ("shmat()");
> +	shmctl (shmemid, IPC_RMID, &shmemds);
> +	break;
> +      }
> +      if (shmctl(shmemid, IPC_RMID, &shmemds) == -1) {
> +	perror ("shmctl()");
> +	if (shmdt(p) == -1) perror ("shmdt()");
> +	break;
> +      }
> +      //printf("shmem: %d bytes allocated using shmget() & shmat() (%X)\n",size,p);
> +      return p;
>      }
> -    if (shmctl(shmemid, IPC_RMID, &shmemds) == -1) {
> -      perror ("shmctl()");
> -      if (shmdt(p) == -1) perror ("shmdt()");
> -      break;
> +    default:
> +      printf("FATAL: Cannot alloate %d bytes shared memory :(\n",size);
> +      return NULL;
>      }
> -//    printf("shmem: %d bytes allocated using shmget() & shmat() (%X)\n",size,p);
> -    return p;
> -	}
> -  default:
> -    printf("FATAL: Cannot alloate %d bytes shared memory :(\n",size);
> -    return NULL;
> +    ++shmem_type;
>    }
> -  ++shmem_type;
> -}
>  }
>  
> -void shmem_free(void* p){
> -  switch(shmem_type){
> -    case 2:
> -	    if (shmdt(p) == -1) perror ("shmdt()");
> -      break;
> +void shmem_free(void* p) {
> +  switch(shmem_type) {
> +  case 2:
> +    if (shmdt(p) == -1) perror ("shmdt()");
> +    break;
>    }
>  }
> 
> _______________________________________________
> Mplayer-cvslog mailing list
> Mplayer-cvslog at mplayer.dev.hu
> http://mplayer.dev.hu/mailman/listinfo/mplayer-cvslog
> 
> 


A'rpi / Astral & ESP-team

--
mailto:arpi at thot.banki.hu
http://esp-team.scene.hu

_______________________________________________
Mplayer-dev-eng mailing list
Mplayer-dev-eng at lists.sourceforge.net
http://lists.sourceforge.net/lists/listinfo/mplayer-dev-eng



More information about the MPlayer-dev-eng mailing list