X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=dgram%2Fdgram.c;h=0dd40aae056901666c0d196664ce0372d6846fea;hp=bb538bf2f1b4d11c9ff39d6ee0be7de6cd602aa7;hb=5d466de467f28ae6f7125bef086d141a7734a4ce;hpb=ac8c0b3b18075ae4273779544eda01c09cfb5145 diff --git a/dgram/dgram.c b/dgram/dgram.c index bb538bf..0dd40aa 100644 --- a/dgram/dgram.c +++ b/dgram/dgram.c @@ -146,17 +146,14 @@ static void recv_call(ClientData sock_cd, int mask) { Tcl_IncrRefCount(invoke); rc= Tcl_ListObjReplace(ip,invoke,sock->script_llength,0,3,args); + for (i=0; i<3; i++) { Tcl_DecrRefCount(args[i]); args[i]= 0; } if (rc) goto x_rc; rc= Tcl_EvalObjEx(ip,invoke,TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT); - for (i=0; i<3; i++) Tcl_DecrRefCount(args[i]); - Tcl_DecrRefCount(invoke); - - hbytes_free(&message_val); - sockaddr_free(&peer_val); - x_rc: + if (invoke) Tcl_DecrRefCount(invoke); + if (rc) Tcl_BackgroundError(ip); } @@ -225,6 +222,7 @@ static void sockid_t_free(Tcl_Obj *o) { } static void sockid_t_dup(Tcl_Obj *src, Tcl_Obj *dup) { dup->internalRep= src->internalRep; + dup->typePtr= &dgramsockid_type; } static void sockid_t_ustr(Tcl_Obj *o) {