[PD-cvs] pd/src desire.c, 1.1.2.217.2.131, 1.1.2.217.2.132 kernel.c, 1.1.2.40, 1.1.2.41

Mathieu Bouchard matju at users.sourceforge.net
Tue Jan 16 00:56:20 CET 2007


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19212

Modified Files:
      Tag: desiredata
	desire.c kernel.c 
Log Message:
removed queue_nevermind and manager_nevermind; added scheduled deletes


Index: kernel.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/kernel.c,v
retrieving revision 1.1.2.40
retrieving revision 1.1.2.41
diff -C2 -d -r1.1.2.40 -r1.1.2.41
*** kernel.c	15 Jan 2007 23:12:01 -0000	1.1.2.40
--- kernel.c	15 Jan 2007 23:56:18 -0000	1.1.2.41
***************
*** 292,295 ****
--- 292,297 ----
  }
  
+ /* in which the value has bit 0 set if the key object is not a zombie,
+    and has bit 1 set if the object has been uploaded to the client */
  t_hash *object_table;
  
***************
*** 307,314 ****
  }
  
! extern "C" void pd_free_zombie(t_pd *x) {
  	t_class *c = x->_class;
  	if (c->gobj) appendix_free((t_gobj *)x);
  	if (c->size) free(x);
  }
  
--- 309,317 ----
  }
  
! void pd_free_zombie(t_pd *x) {
  	t_class *c = x->_class;
  	if (c->gobj) appendix_free((t_gobj *)x);
  	if (c->size) free(x);
+ 	hash_delete(object_table,x);
  }
  
***************
*** 323,327 ****
      }
      /* schedule for deletion if need to keep the allocation around */
!     if (c->gobj && 0 /*is in the client*/) hash_set(object_table,x,0); else pd_free_zombie(x);
  }
  
--- 326,332 ----
      }
      /* schedule for deletion if need to keep the allocation around */
!     if (c->gobj && (long)hash_get(object_table,x)|2) {
! 	hash_set(object_table,x,(void *)((long)hash_get(object_table,x)&~1));
!     } else pd_free_zombie(x);
  }
  
***************
*** 1991,1996 ****
  /* LATER remove the dependence on the current canvas for $0; should be another
  argument. */
! t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, int tonew)
! {
      char buf[MAXPDSTRING];
      char buf2[MAXPDSTRING];
--- 1996,2000 ----
  /* LATER remove the dependence on the current canvas for $0; should be another
  argument. */
! t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, int tonew) {
      char buf[MAXPDSTRING];
      char buf2[MAXPDSTRING];
***************
*** 2011,2023 ****
      str=substr+1;
      while((next=binbuf_expanddollsym(str, buf, dollarnull, ac, av, tonew))>=0) {
!       /*
!        * JMZ: i am not sure what this means, so i might have broken it
!        * it seems like that if "tonew" is set and the $arg cannot be expanded (or the dollarsym is in reality a A_DOLLAR)
!        * 0 is returned from binbuf_realizedollsym
!        * this happens, when expanding in a message-box, but does not happen when the A_DOLLSYM is the name of a subpatch
!        */
! 	if(!tonew&&(0==next)&&(0==*buf)) {
! 	  return 0; /* JMZ: this should mimick the original behaviour */
! 	}
  	strncat(buf2, buf, MAXPDSTRING/2-1);
  	str+=next;
--- 2015,2024 ----
      str=substr+1;
      while((next=binbuf_expanddollsym(str, buf, dollarnull, ac, av, tonew))>=0) {
!     /* JMZ: i am not sure what this means, so i might have broken it. it seems like that if "tonew" is
!        set and the $arg cannot be expanded (or the dollarsym is in reality a A_DOLLAR).
!        0 is returned from binbuf_realizedollsym; this happens when expanding in a message-box,
!        but does not happen when the A_DOLLSYM is the name of a subpatch */
!     /* JMZ: this should mimick the original behaviour */
!  	if(!tonew && !next && !*buf) return 0;
  	strncat(buf2, buf, MAXPDSTRING/2-1);
  	str+=next;
***************
*** 2034,2039 ****
  }
  
- extern t_hash *object_table;
- 
  void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv) {
      static t_atom mstack[MSTACKSIZE], *msp = mstack, *ems = mstack+MSTACKSIZE;
--- 2035,2038 ----
***************
*** 2051,2058 ****
                  if (at->a_w.w_index <= 0 || at->a_w.w_index > argc) {
                      error("$%d: not enough arguments supplied", at->a_w.w_index);
!                     goto cleanup; 
                  } else if (argv[at->a_w.w_index-1].a_type != A_SYMBOL) {
                      error("$%d: symbol needed as message destination", at->a_w.w_index);
!                     goto cleanup; 
                  } else s = argv[at->a_w.w_index-1].a_symbol;
              } else if (at->a_type == A_DOLLSYM) {
--- 2050,2057 ----
                  if (at->a_w.w_index <= 0 || at->a_w.w_index > argc) {
                      error("$%d: not enough arguments supplied", at->a_w.w_index);
!                     goto cleanup;
                  } else if (argv[at->a_w.w_index-1].a_type != A_SYMBOL) {
                      error("$%d: symbol needed as message destination", at->a_w.w_index);
!                     goto cleanup;
                  } else s = argv[at->a_w.w_index-1].a_symbol;
              } else if (at->a_type == A_DOLLSYM) {

Index: desire.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/Attic/desire.c,v
retrieving revision 1.1.2.217.2.131
retrieving revision 1.1.2.217.2.132
diff -C2 -d -r1.1.2.217.2.131 -r1.1.2.217.2.132
*** desire.c	15 Jan 2007 23:38:03 -0000	1.1.2.217.2.131
--- desire.c	15 Jan 2007 23:56:16 -0000	1.1.2.217.2.132
***************
*** 128,133 ****
  }
  
- void manager_nevermind (t_gobj *victim);
- 
  void appendix_free (t_gobj *master) {
  	t_appendix *self = master->dix;
--- 128,131 ----
***************
*** 138,142 ****
  		hash_free(self->visual);
  	}
- 	manager_nevermind(master);
  	free(self);
  }
--- 136,139 ----
***************
*** 252,265 ****
  	for (int i=self->start; i!=(self->start+self->len)%QUEUE_SIZE; i=(i+1)%QUEUE_SIZE)
  
- /* suicide letter from a t_gobj who was the originator of a notice */
- void queue_nevermind (t_queue *self, t_gobj *victim) {
- 	queue_each(i,self) {
- 		if (self->o[i]==victim) {
- 			self->o[i]=0;
- 			printf("cancelled update_object for %p\n",victim);
- 		}
- 	}
- }
- 
  void queue_free (t_queue *self) {
  	abort();
--- 249,252 ----
***************
*** 351,356 ****
  }
  
- void manager_nevermind (t_gobj *victim) {queue_nevermind(manager->q,victim);}
- 
  extern "C" void manager_anything (t_manager *self, t_symbol *s, int argc, t_atom *argv) {
  	binbuf_clear(self->b);
--- 338,341 ----
***************
*** 6369,6372 ****
--- 6354,6362 ----
  
  void pd_upload(t_gobj *self) {
+ 	if (!(long)hash_get(object_table,self)&1) {
+ 		sys_mgui(self,"delete","");
+ 		pd_free_zombie(self);
+ 		return;
+ 	}
  	t_binbuf *b = binbuf_new();
  	t_class *c = self->_class;





More information about the Pd-cvs mailing list